【发布时间】:2018-05-27 03:00:33
【问题描述】:
我正在尝试从 url 下载一些 json。 我正在通过我的三星设备调试应用程序,但由于某种原因,httpclient 需要很长时间才能下载数据。
当我使用 TimeSpan.FromMinutes(30) 设置超时时,httpclient 需要很长时间,这是不切实际的。但是,当我删除超时时,我得到了 try catch 块捕获的 TaskCancelled 异常。
以前有人见过这种行为吗?
尝试检查权限:应用程序需要的唯一权限是互联网,默认情况下在调试模式下授予。
任何帮助将不胜感激。谢谢!
编辑
这是负责下载数据的类:
public static class DataSource
{
public async static void LoadFrom()
{
var uri = new Uri("https://api.coinmarketcap.com/v2/ticker/?convert=usd&sort=price");
try
{
bool isConnected = CrossConnectivity.Current.IsConnected;
HttpClient myClient = new HttpClient(new Xamarin.Android.Net.AndroidClientHandler());
var response = await myClient.GetAsync(uri);
if (response.IsSuccessStatusCode)
{
var Data = await response.Content.ReadAsStringAsync();
var CoinMarketCapObject = JsonConvert.DeserializeObject<CoinMarketCap.CoinMarketCapCurrencyData>(Data);
List<Currency> currencies = new List<Currency>();
if (CoinMarketCapObject != null)
{
foreach (var Datum in CoinMarketCapObject.Data)
{
currencies.Add(new Currency(Datum.Value.name, Datum.Value.symbol, Datum.Value.quotes.USD.price));
}
}
}
}
catch (TimeoutException ex)
{
// Check ex.CancellationToken.IsCancellationRequested here.
// If false, it's pretty safe to assume it was a timeout.
}
catch (TaskCanceledException ex)
{
// Check ex.CancellationToken.IsCancellationRequested here.
// If false, it's pretty safe to assume it was a timeout.
}
catch (Exception e)
{
Debug.Print(e.Message);
}
}
}
我正在从 OnStart 方法调用 LoadFrom 方法。
protected override void OnStart ()
{
// Handle when your app starts
API.DataSource.LoadFrom();
}
【问题讨论】:
-
该方法是如何以及在哪里调用的?
-
数据真的返回了吗?你确定你没有陷入僵局吗?
-
@Nkosi 我添加了一些信息...
-
如果您使用网络浏览器下载数据,下载需要多长时间?
-
答案可能在于您如何调用此 Load() 方法,从顶部方法(事件处理程序)向下发布整个链。
标签: c# xamarin.forms httpclient