Httpclient.GetStringAsync可在UWP和iOS中使用,但不能在Xamarin Forms上使用Android

时间:2019-06-23 18:31:15

标签: android xamarin.forms httpclient

我真的很坚持。我从PCL将Xamarin Forms项目升级到.NET Standard,下面的代码不再在Android上运行。我为Android的HttpClient实现和针对本机TLS 1.2+的SSL / TLS实现设置了Android设置。特别是,当我调试时,我尝试使用httpClient.GetStringAsync越过这条线...…它在没有模块的框架中爆炸(在已加载的模块中找不到当前堆栈框架。无法在此位置显示源) 。然后返回给调用者。尝试/捕获不会捕获和错误。我可以在UWP / iOS中顺利执行此代码。我已经坚持了一段时间了。任何想法将不胜感激。我尝试用using语句包装httpclient,并获得相同的结果。我所有的Nu​​Get软件包都是最新的。我在运行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;
        }

1 个答案:

答案 0 :(得分:0)

我知道了。代码没有错。我正在看这篇文章https://forums.xamarin.com/discussion/88370/httpclient-getasync-throws-task-was-cancelled-exception,这让我开始思考一些事情。如果让它运行足够长的时间(1至2分钟),则会收到超时错误。我在手机上尝试了用于wifi的热点,而不是家用wifi,它可以正常工作。因此,我重新启动了电缆调制解调器,它可以按预期工作。身材好吗?