web-dev-qa-db-ja.com

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を完了できず、ログインに失敗します。エラーとその解決方法を見つけるのを手伝ってください。ありがとうございました。

11
huong

ここでavatar値を取得するために間違ったオブジェクトを使用していますjson.getString(KEY_AVA)json_user.getString(KEY_AVA)である必要があります。

また、例外をスローする代わりに、値が存在しない場合にoptStringを返すgetStringの代わりにnullを使用することもできます。

57