2011-04-13 49 views
1

我目前正在分析來自谷歌的JSON響應翻譯API。我能夠做到這一點沒有問題。看到我沒有太多的XML體驗(我更像是一個XML人),我無法弄清楚如何在JSON解析中實現一些錯誤處理。我正在使用JSON j2me庫。幫助JSON錯誤處理和谷歌翻譯API

這是一個成功的響應:

{"responseData": {"translatedText":"Teks te vertaal ...","detectedSourceLanguage":"en"}, "responseDetails": null, "responseStatus": 200} 

這裏是不成功響應:

{"responseData": null, "responseDetails": "could not reliably detect source language", "responseStatus": 400} 

因此,如果轉換不成功,我想把「responseDetails」的價值爲一個字符串。這是我的解析代碼,它目前不正確解析出responseDetails。相反,「嘗試」的「捕獲」正在被捕獲。

try { 
      JSONObject responseObject = new JSONObject(response); 
      if (responseObject != null) { 
       JSONObject responseData = responseObject 
         .getJSONObject("responseData"); 
       if (responseData != null) { 
        String translatedText = responseData 
          .getString("translatedText"); 
        Notify.alert(translatedText); 
       } else { 
        String responseDetails = responseObject 
          .getString("responseDetails"); 
        Notify.alert(responseDetails); 
       } 
      } 
     } catch (Exception e) { 
      Notify.alert("Unable to translate!"); 
     } 

任何人都可以看到我要去哪裏錯了嗎?

謝謝!

回答

2

既然你說catch塊被觸發,我想通過查看被拋出什麼異常開始調試。您可以簡單地附加警報字符串以包含e.toString()。

因此改變你的警報在catch塊是:

Notify.alert("Unable to translate! " + e.toString()); 

而且看到那是什麼拋出的實際誤差。

基於您的評論,是的,它看起來像它試圖在一個空值創建一個JSONObject,所以鳥巢另一個try/catch塊,並相應地解析它的方式。

try { 
    JSONObject responseObject = new JSONObject(response); 
    if (responseObject != null) { 
     /* Try create a new JSON object from the 
     * responseData object. If it fails, 
     * display an alert */ 
     try { 
      JSONObject responseData = responseObject 
        .getJSONObject("responseData"); 

      if (responseData != null) { 
       String translatedText = responseData 
         .getString("translatedText"); 
       Notify.alert(translatedText); 
      } 

     } catch (Exception e) { 
      String responseDetails = responseObject 
        .getString("responseDetails"); 
      Notify.alert(responseDetails); 
     } 
    } 
} catch (Exception e) { 
    Notify.alert("Unable to translate outer block!"); 
} 
+0

感謝您的意見,creanium。以下是異常情況:org.json.me.JSONException:JSONObject [「responseData」]不是JSONObject。我想這是因爲responseData爲空而發生的?我只是想,我仍然可以檢查,看看它是否爲空,並採取相應的行動... – littleK 2011-04-13 03:30:11

+0

@ behrk2我已根據您的評論更新了我原來的答案。看看是否有幫助。 – creanium 2011-04-13 03:44:44

+0

這個技巧。感謝您的全力幫助! – littleK 2011-04-13 03:48:26