我在Windows Phone 8.1中有一个异步方法,需要从网上下载文件。当然,如果没有互联网连接,它就无法做到。我怎么能面对这个问题。方法是这样的:
public async Task<string> getJson(Uri url)
{
if (NetworkInterface.GetIsNetworkAvailable())
{
HttpClient client = new HttpClient();
string jsonString = await client.GetStringAsync(url);
return jsonString;
}
else
{
await new MessageDialog("No internet connection is avaliable. Please check it !").ShowAsync();
return "";
}
}
我应该在调用getJSon(Uri url)之前添加互联网连接的检查;方法 ?在这种情况下,我必须在每个方法中重写这些代码行,这些代码行需要getJson(Uri url);我不想这样做。
更新
我编写的代码不起作用,因为在没有Internet连接的情况下应用程序崩溃。我不喜欢的解决方案是这样的:
private async void change(object sender, RoutedEventArgs e)
{
if (NetworkInterface.GetIsNetworkAvailable())
{
Frame.Navigate(typeof("Page with async method"));
}
else
{
await new MessageDialog("No internet connection is avaliable. Please check it !").ShowAsync();
}
}
答案 0 :(得分:1)
检查互联网连接是否正常,但在您完成检查后,它仍然可能立即无法使用。
正确的解决方案是捕获异常并处理它:
public async Task<string> getJson(Uri url)
{
bool error = false;
if (NetworkInterface.GetIsNetworkAvailable())
{
try
{
HttpClient client = new HttpClient();
string jsonString = await client.GetStringAsync(url);
return jsonString;
}
catch(Exception) // a more specific exception would be better
{
error = true;
}
}
else
{
error = true;
}
if (error)
{
await new MessageDialog("No internet connection is avaliable. Please check it !").ShowAsync();
return "";
}
}
我个人会在更高级别处理异常(即getJson()
的来电者)