2013-03-18 11 views
8

Wiem, że jest tu kilka pytań z tym samym tematem i błędem, ale żaden z nich nie wskazuje na ten sam problem co mój, więc postanowiłem zamieścić tutaj moje pytanie, mając nadzieję, że ktoś pomóż mi wskazać przyczynę. Więc próbuję wdrożyć funkcję logowania w mojej aplikacji i oto kod:Android - JSONException Brak wartości dla

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

I to jest odpowiedź JSON mam przy logowaniu:

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

Więc najwyraźniej nie ma wartość dla avatar, ale nadal mam to ostrzeżenie w moim LogCat:

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

Ponieważ żadna wartość awatar mam, nie mogę ukończyć addUser stąd logi n nie działa. Proszę pomóż mi znaleźć błąd i jak go rozwiązać. Dziękuję Ci.

+0

jak wyglądają twoje KEY_AVA? – Sajmon

+0

Tak zadeklarowałem: "prywatny statyczny ciąg KEY_AVA =" awatar ";' –

+0

Czy mogę polecić, aby nie używać prawdziwego adresu e-mail w przykładzie. Nigdy nie wiadomo, kto jeszcze patrzy na tę stronę (hakerzy/sprzedawcy itp.). – Bigflow

Odpowiedz

52

Używasz niewłaściwego obiektu do uzyskania wartości avatar tutaj . Powinno to być json_user.getString(KEY_AVA).

Można również użyć optString zamiast getString, która po prostu zwraca null, jeśli wartość nie istnieje, zamiast rzucać wyjątek.

+0

Zgadza się! Byłem zbyt nieostrożny, ale dziękuję bardzo! –

+3

Wielkie dzięki za wskazanie możliwości użycia opcji opt zamiast get! To zaoszczędziło mi wielu kłopotów! –

+0

Nie jest pusty, ale pusty ciąg. – Sam