2013-03-18 7 views
8

So che ci sono diverse domande pubblicate qui con lo stesso argomento ed errore, ma nessuno di loro indica lo stesso problema del mio, quindi ho deciso di postare la mia domanda qui, sperando che qualcuno potesse aiutami a sottolineare la causa. Così sto cercando di implementare la funzione di login nella mia app ed ecco il codice:Android - JSONException Nessun valore per

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

E questa è la risposta JSON ho ricevuto al momento della registrazione:

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

Quindi a quanto pare c'è un rapporto qualità-avatar, ma ho ancora ricevuto questo avvertimento nel mio logcat:

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

Dal momento che nessun valore avatar è ottenuto, non posso completare addUser, quindi logi n fallisce. Per favore aiutatemi a trovare l'errore e come risolverlo. Grazie.

+0

come sembra il tuo KEY_AVA? – Sajmon

+0

Ecco come l'ho dichiarato: 'stringa statica privata KEY_AVA =" avatar ";' –

+0

Posso consigliare di non utilizzare la tua vera e-mail in un esempio. Non sai mai chi altro sta guardando su questo sito (hacker/venditori ecc.) – Bigflow

risposta

52

Si sta utilizzando l'oggetto sbagliato per ottenere il valore avatar qui json.getString(KEY_AVA). Dovrebbe essere json_user.getString(KEY_AVA).

Inoltre, è possibile utilizzare optString anziché getString che restituisce solo null se il valore non esiste, invece di generare un'eccezione.

+0

Proprio così! Ero troppo negligente, ma grazie mille! –

+3

Grazie mille per aver sottolineato la possibilità di usare opt invece di get! Questo mi ha salvato un sacco di problemi! –

+0

Non è nullo ma una stringa vuota. – Sam