Androidcuckoo
Androidcuckoo

Reputation: 121

No such value error in JSON

In my application my back end is PHP,i'm getting values in the form of JSON,i'm hitting some xyz url and it gives some JSON objects for example say 10 Json objects(ie. from 0 to 10 Json objects),and i'm having load_more button when user pressed that button then same xyz url will be hit and get another 10 objects(ie. from 10 to 20 Json objects), now the problem is for the first time it takes all the values in a single Json object but if i hit second time it not taking all the values in a single Json object even though the values is available,and it saying No such values found

Here is my Asynctask

class MyTask extends AsyncTask<String, Void, String> {

    ProgressDialog pDialog;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

        pDialog = new ProgressDialog(Gropinion_Questions.this);
        pDialog.setMessage("Loading...");
        pDialog.setCancelable(false);
        try {
            pDialog.show();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    @Override
    protected String doInBackground(String... params) {
        return Utils.getJSONString(params[0]);
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);


        if (null == result || result.length() == 0) {
            showToast("No data found from web!!!");
            Gropinion_Questions.this.finish();
        } else {

            // get JSON result and give to JsonObject
            try {
                JSONObject mainJson = new JSONObject(result);
                System.out.println("result........."+result);

                JSONArray    jsonArray = mainJson.getJSONArray(ARRAY_NAME);

                System.out.println("@@@@@@@@@@ jsonArray @@@@@@@@@@@ "+jsonArray.length());

                Singleton.jsonArray = jsonArray;
                for (int i = 0; i < 10; i++) {

                    JSONObject objJson = jsonArray.getJSONObject(i);

                    objItem = new QuestionsObject();

                    objItem.setDbcsFacebookProfile(objJson.optString(dbcsFacebookProfile));

                    objItem.setAvatar_img(objJson.optString(Avatar_image));

                    objItem.setVotebar(objJson.optString(percentagenumber));

                    objItem.setProfile_picture_value(objJson.optString(PROFILE_PIC_VALUE));

                    objItem.setId(objJson.optString(ID));
                    objItem.setTitle(objJson.optString(TITLE));
                    objItem.setNick_name(objJson.optString(NICKNAME));
                    objItem.setQues_type(objJson.optString(QUESTIONTYPE));
                    objItem.setCategories(objJson.getString(CATEGORIES));
                    objItem.setSubcatid(objJson.getString(SUBCATID));
                    objItem.setTotal_vote(objJson.getString(TV));

                    arrayOfList.add(objItem);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }

            setAdapterToListview();

            if (null != pDialog && pDialog.isShowing()) {
                try {
                    pDialog.dismiss();
                    pDialog = null;
                } catch (Exception e) {
                }
            }
        }
    }
}

Here is my first Json response

 {
    "questions": [
        {
            "ID": "4260",
            "unique_que": "N2pJS",
            "Title": "Which actress looks more beautiful?",
            "NickName": "shon17",
            "Avatar": "0",
            "dbcsFacebookProfile": "0",
            "QuestionType": "1",
            "Categories": "Shopping & Fashion",
            "SubCategoryID": "5",
            "Hash": "531ff16d876fe",
            "Ext": "jpg",
            "avragequestionrate": "0",
            "progressBar": "0, 0, 0, 0",
            "TotalVote": "0",
            "productImage": "531ff16d876fe.jpg,531ff16d89841.jpg,,",
            "description": "Katrina,kareena,,",
            "productThumbImage": "531ff16d876fe_thumb_75_75.png,531ff16d89841_thumb_75_75.png,,",
            "avatarImage": "1258602873_avatar_75_75.jpg",
            "Default_image_status": "1",
            "voteBar": "0, 531ff16d876fe.jpg, 531ff16d876fe_thumb_75_75.png"
        }

Here is my second Json response

 {
    "questions": [
        {
            "ID": "4232",
            "unique_que": "b6h4a",
            "Title": "which actress do u like more?",
            "NickName": "shon17",
            "Avatar": "0",
            "dbcsFacebookProfile": "0",
            "QuestionType": "1",
            "Categories": "Shopping & Fashion",
            "SubCategoryID": "5",
            "Hash": "531eb4fdc0dd3",
            "Ext": "jpg",
            "avragequestionrate": "0",
            "progressBar": "33, 1, 66, 2, 0, 0, 0, 0, 3",
            "TotalVote": "3",
            "productImage": "531eb4fdc0dd3.jpg,531eb4fdc2c4c.jpg,,",
            "description": "katrina,deepika,,"
        }

This is how i'm getting as a response but when i hit this in browser that time it showing all the fields for load_more but in response it not fetching

I made change from getstring to optstring now it saying different exceotion

Here is my exeption

   03-12 06:09:03.705: W/System.err(1408): org.json.JSONException: Index 7 out of range [0..7)
03-12 06:09:03.705: W/System.err(1408):     at org.json.JSONArray.get(JSONArray.java:263)
03-12 06:09:03.705: W/System.err(1408):     at org.json.JSONArray.getJSONObject(JSONArray.java:480)
03-12 06:09:03.705: W/System.err(1408):     at com.android.groupinion.Gropinion_Questions$MyTask.onPostExecute(Gropinion_Questions.java:1041)
03-12 06:09:03.705: W/System.err(1408):     at com.android.groupinion.Gropinion_Questions$MyTask.onPostExecute(Gropinion_Questions.java:1)
03-12 06:09:03.705: W/System.err(1408):     at android.os.AsyncTask.finish(AsyncTask.java:631)
03-12 06:09:03.705: W/System.err(1408):     at android.os.AsyncTask.access$600(AsyncTask.java:177)
03-12 06:09:03.705: W/System.err(1408):     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
03-12 06:09:03.705: W/System.err(1408):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-12 06:09:03.705: W/System.err(1408):     at android.os.Looper.loop(Looper.java:137)
03-12 06:09:03.705: W/System.err(1408):     at android.app.ActivityThread.main(ActivityThread.java:4745)
03-12 06:09:03.705: W/System.err(1408):     at java.lang.reflect.Method.invokeNative(Native Method)
03-12 06:09:03.705: W/System.err(1408):     at java.lang.reflect.Method.invoke(Method.java:511)
03-12 06:09:03.705: W/System.err(1408):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
03-12 06:09:03.705: W/System.err(1408):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
03-12 06:09:03.705: W/System.err(1408):     at dalvik.system.NativeStart.main(Native Method)

Upvotes: 0

Views: 449

Answers (3)

Herry
Herry

Reputation: 7087

Please update you code by this for loop:

for (int i = 0; i < 10; i++) {
    JSONObject objJson = jsonArray.getJSONObject(i);
    objItem = new QuestionsObject(); 
    objItem.setDbcsFacebookProfile(objJson.optString(dbcsFacebookProfile));
    objItem.setAvatar_img(objJson.optString(Avatar_image));   
    objItem.setVotebar(objJson.optString(percentagenumber));   
    objItem.setProfile_picture_value(objJson.optString(PROFILE_PIC_VALUE));   
    objItem.setId(objJson.optString(ID));
    objItem.setTitle(objJson.optString(TITLE));
    objItem.setNick_name(objJson.optString(NICKNAME));
    objItem.setQues_type(objJson.optString(QUESTIONTYPE));
    objItem.setCategories(objJson.getString(CATEGORIES));
    objItem.setSubcatid(objJson.getString(SUBCATID));   
    if(objJson.has(TV)){       
        objItem.setTotal_vote(objJson.getString(TV));      
    }
    arrayOfList.add(objItem);
}

Upvotes: 0

Sergey  Pekar
Sergey Pekar

Reputation: 8745

As I understood you. You have an exception if there is no value with key you pass to get method.

So you can use optJSONArray to get array, and opt (like optString, optJSONObject, etc.) methods to get other values. These methods does not throw exception, they just returns null if there are no values with key you passed.

You getting your exception because json array length is less than 10 so it is better to use method length() of JSONArray object instead of number 10 in for.

Something like this:

for (int i = 0; i < jsonArray.length(); i++) {

    JSONObject objJson = jsonArray.getJSONObject(i);

    objItem = new QuestionsObject();

    objItem.setDbcsFacebookProfile(objJson.optString(dbcsFacebookProfile));

    objItem.setAvatar_img(objJson.optString(Avatar_image));

    objItem.setVotebar(objJson.optString(percentagenumber));

    objItem.setProfile_picture_value(objJson.optString(PROFILE_PIC_VALUE));

    objItem.setId(objJson.optString(ID));
    objItem.setTitle(objJson.optString(TITLE));
    objItem.setNick_name(objJson.optString(NICKNAME));
    objItem.setQues_type(objJson.optString(QUESTIONTYPE));
    objItem.setCategories(objJson.getString(CATEGORIES));
    objItem.setSubcatid(objJson.getString(SUBCATID));
    objItem.setTotal_vote(objJson.getString(TV));

    arrayOfList.add(objItem);
}

Upvotes: 1

Hariharan
Hariharan

Reputation: 24853

Try this..

Your doing all correct except following three

objItem.setCategories(objJson.getString(CATEGORIES));
objItem.setSubcatid(objJson.getString(SUBCATID));
objItem.setTotal_vote(objJson.getString(TV));

Change it getString as optString

objItem.setCategories(objJson.optString(CATEGORIES));
objItem.setSubcatid(objJson.optString(SUBCATID));
objItem.setTotal_vote(objJson.optString(TV));

Or

if(objJson.has(CATEGORIES))
   objItem.setCategories(objJson.getString(CATEGORIES));

if(objJson.has(SUBCATID))
   objItem.setSubcatid(objJson.getString(SUBCATID));

if(objJson.has(TV))
   objItem.setTotal_vote(objJson.getString(TV));

EDIT

Change your for as like below you have specify that 10 but jsonArray length is only 7 that's error Index out of range

for (int i = 0; i < jsonArray.length(); i++) {

Upvotes: 0

Related Questions