2016-04-04 27 views
0

我試圖用一個try/catch功能來解決這個問題,但我得到的錯誤..當我嘗試加載數據並且應用程序沒有互聯網時,我該如何避免應用程序崩潰?

無法含蓄轉換bool類型來NewtonSoft.Json.Linq.JObject。存在明確的轉換(您是否缺少演員?)

..當我嘗試返回錯誤的捕獲。這是代碼:

static public async Task<JObject> getInfo() 
    { 
     var httpClientRequest = new HttpClient(); 
     try { 

      //connection 
      var result = await httpClientRequest.GetAsync ("localhost"); 

      var resultString = await result.Content.ReadAsStringAsync(); 

      var jsonResult = JObject.Parse (resultString); 

      return jsonResult; 

     } catch { 
     //no connection 
      return false; //ERROR: Cannot implicity convert type bool to NewtonSoft.Json.Linq.JObject. An explicit conversion exists (are you missing a cast?) 
     } 

    } 
+1

你想要'返回null'而不是 - 當你的函數說它返回'Task ',這是編譯器錯誤的來源時,你試圖返回'false'。 –

+0

@David T. Macknet當我返回Null,並關閉wifi並使用應用程序時,我在加載數據的頁面上出現錯誤:'未將對象引用設置爲對象的實例' – medvedo

回答

4

你的方法簽名是

static public async Task<JObject> getInfo() 

所以你不能在catch上返回一個bool。你必須返回一個JObject,或者null。

+0

當我返回空,並關閉WiFi和使用應用程序時,我得到加載數據的頁面上的錯誤:'對象引用未設置爲對象的實例' – medvedo

+1

如果您返回null,則代碼是調用getInfo()方法需要能夠處理null。也許檢查一個空結果,並顯示一條消息給用戶「數據目前不可用」? – Jason

+0

好的。謝謝。現在我懂了。非常感謝。 – medvedo

0

也許你的意思是return null?編譯器抱怨,因爲你的方法聲稱返回一個Task<JObject>,你試圖返回一個bool值。

(顯然,如果返回null,你必須確保調用代碼知道在那種情況下該怎麼做。另一種選擇是允許引發異常,並抓住它上漲。)

+0

這會在代碼中看起來如何? – medvedo

0

正確的做法是拋出一個Exception並將其捕獲到UI層並向用戶顯示警報。

你也可以只做到這一點:的return default(JObject);代替return false;

+0

當我打開我的wifi並嘗試在應用程序中加載數據時,當我使用返回默認值(JObject)時,出現錯誤「對象引用未設置爲對象的實例」 – medvedo

1

JObject是一個實際對象bool不是一個對象。

你可以,但是,返回JToken

static public async Task<JToken> GetInfoAsync() 
{ 
    var httpClientRequest = new HttpClient(); 
    try { 
    ... 
    } catch { 
    //no connection 
    return new JValue(false); 
    } 
} 

我也改名爲你的方法GetInfoAsync跟隨appropriate naming conventions

+0

他是我最喜歡的作者之一! – adv12

相關問題