如何处理Windows Phone中的异常?

时间:2015-03-28 18:15:32

标签: c# windows-phone-8.1

我在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();
        }

    }

1 个答案:

答案 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()的来电者)