【问题标题】:Httpclient.GetStringAsync works in UWP and iOS, but not Android on Xamarin FormsHttpclient.GetStringAsync 适用于 UWP 和 iOS,但不适用于 Xamarin Forms 上的 Android
【发布时间】:2019-06-23 18:31:15
【问题描述】:

我真的坚持这一点。我将我的 Xamarin Forms 项目从 PCL 升级到 .NET Standard,下面的代码不再适用于 Android。我有 Android 的 HttpClient 实现和原生 TLS 1.2+ 的 SSL/TLS 实现的 Android 设置。特别是,当我在调试时,我尝试使用 httpClient.GetStringAsync 跳过这条线……它在 Frame not in module 中爆炸(在加载的模块中找不到当前堆栈帧。无法显示此位置的源) .然后它返回给调用者。 try/catch 不会捕获和错误。我可以在 UWP/iOS 中很好地完成这段代码。我已经坚持了一段时间了。任何想法将不胜感激。我尝试用 using 语句包装 httpclient 并得到相同的结果。我所有的 NuGet 包都是最新的。我在运行 Android 版本 8.1.0 的实际设备上运行,而不是模拟器,运行到实际服务,而不是 localhost。 这是我的代码: :

        private async Task<List<string>> GetVideoIdsFromPlaylistAsync()
        {
            var httpClient = new HttpClient();
            var videoIds = new List<string>();
            try
            {
            var json = await httpClient.GetStringAsync(apiUrlForPlaylist).ConfigureAwait(false);
                JObject response = JsonConvert.DeserializeObject<dynamic>(json);
                var items = response.Value<JArray>("items");
                foreach (var item in items)
                {
                    videoIds.Add(item.Value<JObject>("contentDetails")?.Value<string>("videoId"));
                };
                YoutubeItems = await GetVideosDetailsAsync(videoIds);
            }
            catch (Exception ex)
            {
                Console.WriteLine(@"     Error {0}", ex.Message);
                Console.WriteLine(@"     Error {0}", ex.InnerException?.Message);
            }
            return videoIds;
        }

【问题讨论】:

  • 尝试将 HttpClient implementation 更改为 Managed 并将 SSL/TLS implementation 更改为 Native TLS 1.2+
  • @LeoZhu-MSFT 谢谢,但得到了相同的结果。不过,等了一会儿,这次try catch却抓到了一个错误。任务被取消。我开始认为 Android 的 UI 线程中发生了一些阻塞。除了我的原始 ViewModel 之外,我还能够在页面后面的代码中重新创建此错误。接下来我将开始研究。
  • 它抛出什么错误?

标签: android xamarin.forms httpclient


【解决方案1】:

我想通了。代码没有任何问题。我在看这个帖子https://forums.xamarin.com/discussion/88370/httpclient-getasync-throws-task-was-cancelled-exception,它让我想尝试一些事情。如果我让它运行足够长的时间(1 到 2 分钟),我会收到超时错误。我在手机上尝试了我的热点而不是我的家庭wifi,它可以工作。所以,我重新启动了电缆调制解调器,它按预期工作。去看看?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多