2015-10-03 137 views
0

我得到一個JSONObject異常的情況下,我的JSON對象中的twittermedia在我的下面的代碼中爲null,即使我檢查確保我沒有將值分配給任何東西,如果它是。我正在檢查正確的方式嗎?或者我該如何避免我的代碼拋出異常,並允許我檢查twitter值是否存在?Android越來越JSONObject異常

if(nextActivityObject.getJSONObject("media") != null){ 

    media = nextActivityObject.getJSONObject("media"); 
    Log.d("NEXT MEDIA OBJECT NOT EMPTY", media.toString()); 

    if(media.getString("twitter") != null && media.getString("facebook") != null){ 
     Log.d("BOTH NOT NULL", "both not null"); 
     twitter = media.getString("twitter"); 
     facebook = media.getString("facebook"); 

      intent.putExtra("twitter", twitter); 
      intent.putExtra("facebook", facebook); 
     } 
     else if(media.getString("twitter") != null){ 

      twitter = media.getString("twitter"); 
      Log.d("JUST TWITTER NOT NULL", twitter.toString()); 
      intent.putExtra("twitter", twitter); 
     } 
     else if(media.getString("facebook") != null){ 
      facebook = media.getString("facebook"); 
      Log.d("JUST FACEBOOK NOT NULL", facebook.toString()); 
      intent.putExtra("facebook", facebook); 
     } 
    } 

回答

1

您可以使用media.optString("twitter");。並且您需要另一個media.has("twitter")來區分「沒有密鑰稱爲twitter」和「twitter密鑰具有空字符串值」。

綜上所述,對於「推特」鍵,你可以寫

else if(media.has("twitter")){ 
     twitter = media.optString("twitter"); 
     // here twitter is non-NULL String 
     Log.d("JUST TWITTER NOT NULL", twitter.toString()); 
     intent.putExtra("twitter", twitter); 
    } 
+0

我試過'media.optString(「twitter」)',但沒有運氣。我檢查了我的JSON對象響應,並且在它崩潰的情況下,值是'{'facebook':....'}'並且沒有twitter,所以在那種情況下我會使用'.has'來檢查「沒有鑰匙「的情況? – Rafa

+0

@ ralphie9224我已經在答案中再次總結。使用'opt *()'而不是'get *()'將異常處理改爲空引用/空字符串/ NaN值檢查。 – timrau

1

使用。先後方法來找出關鍵是在JSON或沒有。而不是getString,使用optString是明智的。