android - 在 Xamarin Forms 项目中升级 nuget 后的 Android 网络问题
问题描述
我有一个旧的 Xamarin Forms 项目。经过几个月的不活动后,我必须对其进行一些更改。
首先,我已经更新了 nuget,但我无法前进:我在 nuget 更新后对其进行了测试,在 IOS 上它像之前一样工作,但在 Android 上所有 http 请求都停止工作。我总是立即返回“任务已取消”异常(问题与时间无关,我在发送请求时立即得到它)。
我环顾了网络,但没有得到有关这种奇怪行为的信息。
这是我用来发出 http 请求的简单代码:
private string FetchData(string requestURL)
{
var httpHandler = new HttpClientHandler
{
UseDefaultCredentials = false,
Credentials = _credential
};
using (var httpClient = new HttpClient(httpHandler, false))
{
var response = httpClient.GetStringAsync(requestURL).Result;
return response;
}
}
调用堆栈:
[0:] Fail: A task was canceled.
[0:] at System.Diagnostics.DefaultTraceListener.Fail (System.String message, System.String detailMessage) [0x00000] in <ca7419b40e504a6dbe088f6fe95d09aa>:0
at System.Diagnostics.TraceListener.Fail (System.String message) [0x00000] in <ca7419b40e504a6dbe088f6fe95d09aa>:0
at System.Diagnostics.DefaultTraceListener.Fail (System.String message) [0x00000] in <ca7419b40e504a6dbe088f6fe95d09aa>:0
at System.Diagnostics.TraceInternal.Fail (System.String message) [0x00000] in <ca7419b40e504a6dbe088f6fe95d09aa>:0
at System.Diagnostics.TraceInternal.Assert (System.Boolean condition, System.String message) [0x00000] in <ca7419b40e504a6dbe088f6fe95d09aa>:0
at System.Diagnostics.Debug.Assert (System.Boolean condition, System.String message) [0x00000] in <ca7419b40e504a6dbe088f6fe95d09aa>:0
at projectx_Plus.Pages.LoginPage.<.ctor>b__3_0 (System.Object sender, System.EventArgs e) [0x00a9f] in <f1910371c2b04847a4cb7bfe1ad97f28>:0
at System.Runtime.CompilerServices.AsyncMethodBuilderCore+MoveNextRunner.InvokeMoveNext (System.Object stateMachine) [0x00000] in <ff07eae8184a40a08e79049bbcb31a0e>:0
at System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00000] in <ff07eae8184a40a08e79049bbcb31a0e>:0
at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00000] in <ff07eae8184a40a08e79049bbcb31a0e>:0
at System.Runtime.CompilerServices.AsyncMethodBuilderCore+MoveNextRunner.Run () [0x00000] in <ff07eae8184a40a08e79049bbcb31a0e>:0
at System.Threading.Tasks.AwaitTaskContinuation.InvokeAction (System.Object state) [0x00000] in <ff07eae8184a40a08e79049bbcb31a0e>:0
at System.Threading.Tasks.AwaitTaskContinuation.RunCallback (System.Threading.ContextCallback callback, System.Object state, System.Threading.Tasks.Task& currentTask) [0x00000] in <ff07eae8184a40a08e79049bbcb31a0e>:0
at System.Threading.Tasks.SynchronizationContextAwaitTaskContinuation.Run (System.Threading.Tasks.Task ignored, System.Boolean canInlineContinuationTask) [0x00000] in <ff07eae8184a40a08e79049bbcb31a0e>:0
at System.Threading.Tasks.Task.FinishContinuations () [0x00000] in <ff07eae8184a40a08e79049bbcb31a0e>:0
at System.Threading.Tasks.Task.FinishStageThree () [0x00000] in <ff07eae8184a40a08e79049bbcb31a0e>:0
at System.Threading.Tasks.Task.CancellationCleanupLogic () [0x00000] in <ff07eae8184a40a08e79049bbcb31a0e>:0
at System.Threading.Tasks.Task.TrySetCanceled (System.Threading.CancellationToken tokenToRecord, System.Object cancellationException) [0x00000] in <ff07eae8184a40a08e79049bbcb31a0e>:0
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1[TResult].SetException (System.Exception exception) [0x00000] in <ff07eae8184a40a08e79049bbcb31a0e>:0
at projectx_Plus.API.DataFetcher.AuthenticateUserAsync () [0x000db] in <f1910371c2b04847a4cb7bfe1ad97f28>:0
at System.Runtime.CompilerServices.AsyncMethodBuilderCore+MoveNextRunner.InvokeMoveNext (System.Object stateMachine) [0x00000] in <ff07eae8184a40a08e79049bbcb31a0e>:0
at System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00000] in <ff07eae8184a40a08e79049bbcb31a0e>:0
at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00000] in <ff07eae8184a40a08e79049bbcb31a0e>:0
at System.Runtime.CompilerServices.AsyncMethodBuilderCore+MoveNextRunner.Run () [0x00000] in <ff07eae8184a40a08e79049bbcb31a0e>:0
at System.Threading.Tasks.SynchronizationContextAwaitTaskContinuation+<>c.<.cctor>b__7_0 (System.Object state) [0x00000] in <ff07eae8184a40a08e79049bbcb31a0e>:0
at Android.App.SyncContext+<>c__DisplayClass2_0.<Post>b__0 () [0x00000] in <3324153164274220ab14392825330ba2>:0
at Java.Lang.Thread+RunnableImplementor.Run () [0x00000] in <3324153164274220ab14392825330ba2>:0
at Java.Lang.IRunnableInvoker.n_Run (System.IntPtr jnienv, System.IntPtr native__this) [0x00000] in <3324153164274220ab14392825330ba2>:0
at Android.Runtime.DynamicMethodNameCounter.49 (System.IntPtr , System.IntPtr ) [0x00000] in <3324153164274220ab14392825330ba2>:0
我在 Visual Studio 的应用程序启动时注意到输出窗口中有一些奇怪的条目,这些条目似乎与此问题有关:
09-11 13:41:43.216 D/Mono (18770): Loading reference 8 of netstandard.dll asmctx DEFAULT, looking for System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
09-11 13:41:43.219 D/Mono (18770): Image addref System.Net.Http[0x7cbab75c80] (asmctx DEFAULT) -> System.Net.Http.dll[0x7cbab74800]: 2
09-11 13:41:43.219 D/Mono (18770): Prepared to set up assembly 'System.Net.Http' (System.Net.Http.dll)
09-11 13:41:43.219 D/Mono (18770): Assembly System.Net.Http[0x7cbab75c80] added to domain RootDomain, ref_count=1
09-11 13:41:43.220 D/Mono (18770): AOT: image 'System.Net.Http.dll.so' not found: (null)
09-11 13:41:43.220 D/Mono (18770): AOT: image '/Users/builder/jenkins/workspace/archive-mono/2019-02/android/release/sdks/out/android-arm64-v8a-release/lib/mono/aot-cache/arm64/System.Net.Http.dll.so' not found: (null)
09-11 13:41:43.220 D/Mono (18770): Config attempting to parse: 'System.Net.Http.dll.config'.
09-11 13:41:43.220 D/Mono (18770): Config attempting to parse: '/Users/builder/jenkins/workspace/archive-mono/2019-02/android/release/sdks/out/android-arm64-v8a-release/etc/mono/assemblies/System.Net.Http/System.Net.Http.config'.
09-11 13:41:43.220 D/Mono (18770): Assembly Ref addref netstandard[0x7cbeb84400] -> System.Net.Http[0x7cbab75c80]: 2
09-11 13:41:43.220 D/Mono (18770): Loading reference 0 of System.Net.Http.dll asmctx DEFAULT, looking for mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e
09-11 13:41:43.220 D/Mono (18770): Assembly Ref addref System.Net.Http[0x7cbab75c80] -> mscorlib[0x7ccfdfdf00]: 118
Loaded assembly: System.Net.Http.dll [External]
以下是我在项目中使用的 nuget 包:
<PackageReference Include="Acr.UserDialogs">
<Version>7.0.4</Version>
</PackageReference>
<PackageReference Include="Microsoft.AppCenter.Analytics">
<Version>2.1.1</Version>
</PackageReference>
<PackageReference Include="Microsoft.AppCenter.Crashes">
<Version>2.1.1</Version>
</PackageReference>
<PackageReference Include="Microsoft.Bcl.Build">
<Version>1.0.21</Version>
</PackageReference>
<PackageReference Include="Naxam.Mapbox.Droid">
<Version>8.3.0</Version>
</PackageReference>
<PackageReference Include="Naxam.Mapbox.Droid.Custom">
<Version>6.4.2</Version>
</PackageReference>
<PackageReference Include="Naxam.MapboxAnnotation.Droid">
<Version>0.7.0</Version>
</PackageReference>
<PackageReference Include="Naxam.MapboxGestures.Droid">
<Version>0.5.1</Version>
</PackageReference>
<PackageReference Include="Naxam.MapboxSdkCore.Droid">
<Version>3.4.0</Version>
</PackageReference>
<PackageReference Include="Naxam.MapboxSdkGeojson.Droid">
<Version>4.8.0.1</Version>
</PackageReference>
<PackageReference Include="Naxam.MapboxSdkServices.Droid">
<Version>3.4.0</Version>
</PackageReference>
<PackageReference Include="NControl.Controls">
<Version>0.9.4.1</Version>
</PackageReference>
<PackageReference Include="NGraphics">
<Version>0.5.0</Version>
</PackageReference>
<PackageReference Include="Plugin.Share">
<Version>7.1.1</Version>
</PackageReference>
<PackageReference Include="Syncfusion.Xamarin.Expander">
<Version>17.2.0.51</Version>
</PackageReference>
<PackageReference Include="Syncfusion.Xamarin.SfAutoComplete">
<Version>17.2.0.51</Version>
</PackageReference>
<PackageReference Include="Syncfusion.Xamarin.SfChart">
<Version>17.2.0.51</Version>
</PackageReference>
<PackageReference Include="Syncfusion.Xamarin.SfComboBox">
<Version>17.2.0.51</Version>
</PackageReference>
<PackageReference Include="Syncfusion.Xamarin.SfListView">
<Version>17.2.0.51</Version>
</PackageReference>
<PackageReference Include="Syncfusion.Xamarin.SfSparkline">
<Version>17.2.0.51</Version>
</PackageReference>
<PackageReference Include="Xam.Plugin.DeviceInfo">
<Version>4.1.1</Version>
</PackageReference>
<PackageReference Include="Xam.Plugin.ExternalMaps">
<Version>4.0.1</Version>
</PackageReference>
<PackageReference Include="Xam.Plugins.Messaging">
<Version>5.2.0</Version>
</PackageReference>
<PackageReference Include="Xam.Plugins.Settings">
<Version>3.1.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Android.Arch.Core.Common">
<Version>1.1.1.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Android.Arch.Core.Runtime">
<Version>1.1.1.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Android.Arch.Lifecycle.Common">
<Version>1.1.1.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Android.Arch.Lifecycle.Extensions">
<Version>1.1.1.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Android.Arch.Lifecycle.Runtime">
<Version>1.1.1.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Android.Support.Animated.Vector.Drawable">
<Version>28.0.0.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Android.Support.Annotations">
<Version>28.0.0.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Android.Support.Compat">
<Version>28.0.0.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Android.Support.Core.UI">
<Version>28.0.0.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Android.Support.Core.Utils">
<Version>28.0.0.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Android.Support.CustomTabs">
<Version>28.0.0.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Android.Support.Design">
<Version>28.0.0.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Android.Support.Fragment">
<Version>28.0.0.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Android.Support.Media.Compat">
<Version>28.0.0.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Android.Support.Transition">
<Version>28.0.0.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Android.Support.v4">
<Version>28.0.0.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Android.Support.v7.AppCompat">
<Version>28.0.0.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Android.Support.v7.CardView">
<Version>28.0.0.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Android.Support.v7.MediaRouter">
<Version>28.0.0.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Android.Support.v7.Palette">
<Version>28.0.0.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Android.Support.v7.RecyclerView">
<Version>28.0.0.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Android.Support.Vector.Drawable">
<Version>28.0.0.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Build.Download">
<Version>0.4.11</Version>
</PackageReference>
<PackageReference Include="Xamarin.Firebase.Common">
<Version>71.1610.0</Version>
</PackageReference>
<PackageReference Include="Xamarin.Firebase.Iid">
<Version>71.1710.0</Version>
</PackageReference>
<PackageReference Include="Xamarin.Firebase.Messaging">
<Version>71.1740.0</Version>
</PackageReference>
<PackageReference Include="Xamarin.Forms">
<Version>4.2.0.709249</Version>
</PackageReference>
<PackageReference Include="Xamarin.Forms.Maps">
<Version>4.2.0.709249</Version>
</PackageReference>
<PackageReference Include="Xamarin.Forms.Visual.Material">
<Version>4.2.0.709249</Version>
</PackageReference>
<PackageReference Include="Xamarin.GooglePlayServices.Base">
<Version>71.1610.0</Version>
</PackageReference>
<PackageReference Include="Xamarin.GooglePlayServices.Basement">
<Version>71.1620.0</Version>
</PackageReference>
<PackageReference Include="Xamarin.GooglePlayServices.Location">
<Version>71.1600.0</Version>
</PackageReference>
<PackageReference Include="Xamarin.GooglePlayServices.Maps">
<Version>71.1610.0</Version>
</PackageReference>
<PackageReference Include="Xamarin.GooglePlayServices.Tasks">
<Version>71.1601.0</Version>
</PackageReference>
项目的最低Android版本为5.0,目标版本为9.0。HTTP 客户端实现设置为默认值,SSL/TLS 实现也是默认值(本机 TLS 1.2+)
我在真机上测试过,wifi连接没问题,我发送HTTP请求的服务器也没问题,我什至可以从同一设备上的网络浏览器与它通信。
请问有人有什么建议吗?非常感谢!
解决方案
Xamarin.Forms 对 没有影响HttpClient
,它们仅对用户界面有影响。
您应该进一步考虑以了解您还更改了哪些内容,并在发现时提出新问题。