2013-03-18 2 views
8

Ich weiß, dass es hier mehrere Fragen mit dem gleichen Thema und Fehler gibt, aber keine von ihnen zeigen das gleiche Problem wie meine, so dass ich beschlossen, meine Frage hier zu posten, in der Hoffnung, dass jemand würde Hilf mir, auf die Ursache hinzuweisen. So versucht ich die Login-Funktion in meiner App zu implementieren und hier ist der Code:Android - JSONException Kein Wert für

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(); 
       } 
      } 

Und das ist die JSON-Antwort bekam ich bei der Anmeldung:

{ 
    "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" 
    } 
} 

So anscheinend gibt es ein Wert für avatar, aber ich habe noch diese Warnung in meinem logcat bekam:

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

Da kein Wert avatar bekam ist, kann ich addUser nicht abgeschlossen, daher logi n schlägt fehl. Bitte helfen Sie mir den Fehler zu finden und wie man es löst. Vielen Dank.

+0

Wie sehen Sie Ihre KEY_AVA? – Sajmon

+0

So habe ich es deklariert: 'private static String KEY_AVA =" avatar ";' –

+0

Darf ich Ihnen raten, Ihre reale E-Mail nicht in einem Beispiel zu verwenden. Sie wissen nie, wer sonst noch auf dieser Website schaut (Hacker/Verkäufer etc.) – Bigflow

Antwort

52

Sie verwenden das falsche Objekt, um avatar Wert hier json.getString(KEY_AVA) zu erhalten. Es sollte json_user.getString(KEY_AVA) sein.

Sie können auch optString anstelle von getString verwenden, die null zurückgibt, wenn der Wert nicht vorhanden ist, anstatt eine Ausnahme auszulösen.

+0

Das stimmt! Ich war zu nachlässig, aber vielen Dank! –

+3

Vielen Dank für die Möglichkeit, opt anstelle von get zu verwenden! Das hat mir eine Menge Ärger erspart! –

+0

Es ist nicht null, sondern eine leere Zeichenfolge. – Sam