2013-03-18 23 views
8
沒有任何價值

我知道這裏有幾個相同的主題和錯誤發佈的問題,但沒有一個指出與我的相同的問題,所以我決定在這裏發佈我的問題,希望有人會幫助我指出原因。 所以我想實現我的應用程序的登錄功能和下面的代碼:Android - JSONException對於

if (tag.equalsIgnoreCase(login_tag)){ 
       // check for login response 
       try { 
        if (json.getString(KEY_SUCCESS) != null) { 
         String res = json.getString(KEY_SUCCESS); 
         if(Integer.parseInt(res) == 1){ 
          // user successfully logged in 
          // Store user details in SQLite Database 
          DatabaseHandler db = new DatabaseHandler(mContext); 
          JSONObject json_user = json.getJSONObject("user"); 

          // Clear all previous data in database 
          logoutUser(mContext); 
          Toast.makeText(mContext, json.toString(3), Toast.LENGTH_LONG).show(); 
          db.addUser(json_user.getString(KEY_EMAIL), json_user.getString(KEY_NAME), json.getString(KEY_UID), json.getString(KEY_AVA), json_user.getString(KEY_BDAY), json_user.getString(KEY_COUNTRY), json_user.getString(KEY_PREF), json_user.getString(KEY_SPEND)); 

          // Launch Dashboard Screen 
          Intent dashboard = new Intent(mContext, DashboardActivity.class); 

          // Close all views before launching Dashboard 
          dashboard.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
          mContext.startActivity(dashboard); 

          // Close Login Screen 
          ((Activity) mContext).finish(); 
         } 
        } 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 

這是JSON響應在登錄時我:

{ 
    "tag": "login", 
    "success": 1, 
    "error": 0, 
    "uid": "5123", 
    "user": { 
     "email": "[email protected]", 
     "name": "abc", 
     "avatar": "avatars/img_hzsxda_2013-03-18-11-03-33.jpg", 
     "bday": "1991-02-01", 
     "country": "Australia", 
     "preferences": "none", 
     "spending": "none" 
    } 
} 

因此很明顯,有一個值avatar,但我仍然有這樣的警告在我的logcat:

03-18 12:06:36.972: W/System.err(24574): org.json.JSONException: No value for avatar 

由於沒有價值的頭像了,我無法完成addUser,因此LOGI n失敗。 請幫我看看這個錯誤以及如何解決它。謝謝。

+0

怎麼看你的KEY_AVA? – Sajmon 2013-03-18 12:54:28

+0

這就是我聲明的方式:'private static String KEY_AVA =「avatar」;' – 2013-03-18 12:55:57

+0

我可以建議在示例中不要使用真實的電子郵件。你永遠不知道這個網站上還有其他人在看什麼(黑客/賣家等) – Bigflow 2013-03-18 13:08:41

回答

52

您正在使用錯誤的對象獲得avatarjson.getString(KEY_AVA)。它應該是json_user.getString(KEY_AVA)

另外,如果值不存在,則可以使用optString而不是getString,而不是拋出異常,而只返回null

+0

沒錯!我太粗心了,但是非常感謝你! – 2013-03-18 12:57:57

+3

非常感謝您指出使用opt而不是get的可能性!這爲我節省了很多麻煩! – 2014-03-12 13:53:21

+0

它不是空,而是一個空字符串。 – Sam 2015-07-13 02:46:59