Android - JSONException No value for
Asked Answered
V

1

16

I know that there are several questions posted on here with the same topic and error, but none of them indicate the same problem as mine, so I decided to post my question here, hoping that someone would help me point out the cause. So I'm trying to implement the login feature in my app and here's the code:

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

And this is the JSON response I got when logging in:

{
    "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 apparently there is a value for avatar, but I still got this warning in my logcat:

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

Since no value avatar is got, I can't complete addUser, hence login fails. Please help me find the error and how to solve it. Thank you.

Ventre answered 18/3, 2013 at 12:52 Comment(4)
how look your KEY_AVA?Keheley
This is how I declared it: private static String KEY_AVA = "avatar";Ventre
May I advise to not use your real e-mail in an example. You never know who else is looking on this website (hackers/sellers etc.)Prosaism
Actually that's not my real email, but it could be someone else's so I changed it anyway. Thanks for your suggestion.Ventre
T
68

You are using the wrong object to get avatar value here json.getString(KEY_AVA). It should be json_user.getString(KEY_AVA).

Also, you can use optString instead of getString which just returns null if value doesn't exist, instead of throwing an exception.

Target answered 18/3, 2013 at 12:55 Comment(3)
Thanks a lot for pointing out the possibility to use opt instead of get! This saved me a lot of trouble!Covet
Its not null but an empty string.Cohleen
man.. why did it have to have these 2 different methods. its normal to have in some cases keys that have null as values.Inspectorate

© 2022 - 2024 — McMap. All rights reserved.