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 есть значение, но я все равно получил это предупреждение в своем логарифме:

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

Поскольку аватар не имеет значения, я не могу выполнить addUser, поэтому вход невозможен. Помогите, пожалуйста, найти ошибку и как ее решить. Спасибо.


person huong    schedule 18.03.2013    source источник
comment
как выглядит ваш KEY_AVA?   -  person Simon Dorociak    schedule 18.03.2013
comment
Вот как я это объявил: private static String KEY_AVA = "avatar";   -  person huong    schedule 18.03.2013
comment
Могу ли я посоветовать не использовать ваш реальный адрес электронной почты в качестве примера. Вы никогда не знаете, кто еще просматривает этот сайт (хакеры/продавцы и т. д.)   -  person Bigflow    schedule 18.03.2013
comment
На самом деле это не мой настоящий адрес электронной почты, но он мог принадлежать кому-то другому, поэтому я все равно изменил его. Спасибо за ваше предложение.   -  person huong    schedule 18.03.2013


Ответы (1)


Вы используете неправильный объект для получения значения avatar здесь json.getString(KEY_AVA). Должно быть json_user.getString(KEY_AVA).

Кроме того, вы можете использовать optString вместо getString, который просто возвращает null, если значение не существует, вместо создания исключения.

person Vladimir Mironov    schedule 18.03.2013
comment
Большое спасибо за указание на возможность использовать opt вместо get! Это избавило меня от многих проблем! - person X.X_Mass_Developer; 12.03.2014
comment
Это не ноль, а пустая строка. - person Sam; 13.07.2015