Xamarin.Forms Android 上的 HttpClient 没有响应并冻结 (Prism)
HttpClient on Xamarin.Forms Android Not Responding and Freezing (Prism)
我有一个非常简单的 MVVM 应用程序,它使用 Xamrin Forms 和 Prism,是从 Prism Xamarin 模板构建的。
当我初始化一个新的 ViewModel 时,我试图调用一个 API,在 UWP 上这没有任何问题,但在 Android 上它只是冻结并且没有返回任何错误或抛出任何异常。
我已将代码简化到错误发生的位置,并使用任何人都可以使用的 URI 进行了测试。
public async Task InitializeAsync(INavigationParameters parameters)
{
try
{
var client = new HttpClient();
var response = await client.GetAsync("https://www.google.co.uk").ConfigureAwait(false);
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message);
}
}
我正在使用以下 NuGets
- Prism.Core v8.0.0.1909
- Prism.Dryloc.Forms v8.0.0.1909
- Xamarin.Forms v4.8.0.1687
我已将 HttpClient 实现设置为 Android 和 Native TLS 1.2+
我查看了其他几篇看起来相似但没有解决问题的帖子,任何人都可以阐明我如何解决此问题或使其正常工作吗?
我在开始使用 Xamarin 时遇到了同样的问题。
我还建立了一个可以帮助你的库,叫做 Rest.API.Translator
您也可以在 nuget
上找到它
如果你不愿意使用我的库,你可以看看我的代码here知道我是如何解决冻结问题的。
看看
Client.GetAsync(new Uri(url)).Await()
.Await
是我创建的一个扩展,以确保在 http 调用之间不会发生重叠和冻结问题
在对此进行了一段时间的故障排除并将我的头撞到砖墙上后,我终于弄清楚出了什么问题。
没有!
单步执行 Android 没有单步执行下面的第 7 行,也没有重绘屏幕。
var response = await client.GetAsync("https://www.google.co.uk").ConfigureAwait(false);
当我将 phone 旋转 90 度时,屏幕会重新绘制,我可以看到请求已生效。
我有一个非常简单的 MVVM 应用程序,它使用 Xamrin Forms 和 Prism,是从 Prism Xamarin 模板构建的。
当我初始化一个新的 ViewModel 时,我试图调用一个 API,在 UWP 上这没有任何问题,但在 Android 上它只是冻结并且没有返回任何错误或抛出任何异常。
我已将代码简化到错误发生的位置,并使用任何人都可以使用的 URI 进行了测试。
public async Task InitializeAsync(INavigationParameters parameters)
{
try
{
var client = new HttpClient();
var response = await client.GetAsync("https://www.google.co.uk").ConfigureAwait(false);
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message);
}
}
我正在使用以下 NuGets
- Prism.Core v8.0.0.1909
- Prism.Dryloc.Forms v8.0.0.1909
- Xamarin.Forms v4.8.0.1687
我已将 HttpClient 实现设置为 Android 和 Native TLS 1.2+
我查看了其他几篇看起来相似但没有解决问题的帖子,任何人都可以阐明我如何解决此问题或使其正常工作吗?
我在开始使用 Xamarin 时遇到了同样的问题。
我还建立了一个可以帮助你的库,叫做 Rest.API.Translator 您也可以在 nuget
上找到它如果你不愿意使用我的库,你可以看看我的代码here知道我是如何解决冻结问题的。
看看
Client.GetAsync(new Uri(url)).Await()
.Await
是我创建的一个扩展,以确保在 http 调用之间不会发生重叠和冻结问题
在对此进行了一段时间的故障排除并将我的头撞到砖墙上后,我终于弄清楚出了什么问题。
没有!
单步执行 Android 没有单步执行下面的第 7 行,也没有重绘屏幕。
var response = await client.GetAsync("https://www.google.co.uk").ConfigureAwait(false);
当我将 phone 旋转 90 度时,屏幕会重新绘制,我可以看到请求已生效。