2012-06-19 56 views
0

我正在开发连接到服务并使用一些JSON数据的应用程序。消费很好(JSON.net的岩石),但我想知道我应该抓住异常错误和显示简单的MessageBox?尝试在几个地方,但仍然我的应用程序正在关闭。或者,也许我应该根据包含错误标签的json响应来做到这一点?我认为正常的错误处理可能会更容易,但在现在脑子里一片空白点..WebClient方法在哪里捕获异常?

代码如下:

private void LoginLoginButton_Click(object sender, System.EventArgs e) 
     { 
      ((ApplicationBarIconButton)ApplicationBar.Buttons[0]).IsEnabled = false; 
      ProgressOverlay.Show(); 
      GenerateLoginString(); 
      var w = new SharpGIS.GZipWebClient(); 

      Observable.FromEvent<DownloadStringCompletedEventArgs>(w, "DownloadStringCompleted") 
       .Subscribe(r => 
       { 

        var settings = IsolatedStorageSettings.ApplicationSettings; 


        var deserializedRootObject = JsonConvert.DeserializeObject<RootObject>(r.EventArgs.Result); 

        UserSettings us = new UserSettings() 
        { 


          first_name = deserializedRootObject.user.first_name, 
          last_name = deserializedRootObject.user.last_name, 
          user_id = deserializedRootObject.user_id, 

        }; 
        settings.Add("UserSettings", us); 
        settings.Save(); 
       }); 
      w.DownloadStringAsync(new Uri(UserUri)); 
      w.DownloadStringCompleted += new DownloadStringCompletedEventHandler(w_DownloadStringCompleted); 

     } 

     void w_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
     { 
       NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative)); 
     } 

回答

0

如果你的意思是你想赶上这发生在你的Web客户端异常打电话的话应该在财产DownloadStringCompletedEventArgs

void w_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
{ 
    if(e.Error != null) 
    { 
     MessageBox.Show("An error occurred!"); 
    } 
    else 
    { 
     NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative)); 
    } 
} 
+0

我试过这一个。但错误再次出现。它出现在UserSettings对象无法填充的时刻。情景是:如果登录数据没问题,我得到对象调用UserSettings,如果没有,我只有一个名为error的json条目:“error” – dargod

+0

所以我想我应该尝试捕获异常,当我知道我会得到什么结果得到 – dargod

0

解决!

我用try和catch在这种情况下。作品完美:)