0

In my application I am trying to parse data through JSON and trying to display in listview in android. But I am getting java.lang.NoSuchMethodError:org.json.JSONArray error while parsing data. This is the link that I am using for parsing data. http://demo.tugain.com/tapme/RetriveAll.php?q=cat

For this, I used the below code :

private void connect() 
    {
String data;
        JSONArray json;
        try
        {
            DefaultHttpClient client = new DefaultHttpClient();
            HttpGet request = new HttpGet("http://demo.tugain.com/tapme/RetriveAll.php?q=cat");
            HttpResponse response = client.execute(request);
            HttpEntity entity=response.getEntity();
            data=EntityUtils.toString(entity);
            Log.e("STRING", data);

            try
            {
                JSONObject obj=null;

                json=new JSONArray(data);
                JSONArray actualJson=json.getJSONArray(0);

                for(int i=0;i<actualJson.length();i++)
                {
                    obj=actualJson.getJSONObject(i);

                    name=obj.getString("name");
                    Log.e("name",name);
                    mAdapter.addSectionHeaderItem(name);
                    setListAdapter(mAdapter);

                    //JSONArray json1=new JSONArray("data");
                    JSONArray json1=new JSONArray(obj.getJSONArray("data"));

                    for(int j=0;j< json1.length();j++)
                    {
                        JSONObject obj1=null;
                        obj1 = json1.getJSONObject(j);
                        CompName= obj1.getString("vendor_name");
                        CompID=obj1.getString("vendor_id");
                        Log.e("vender",CompName);
                        Log.e("id",CompID);
                    }
                }
            }
            catch (JSONException e) 
            {
                e.printStackTrace();
            }
        } catch (ClientProtocolException e) {
            Log.d("HTTPCLIENT", e.getLocalizedMessage());
        } catch (IOException e) {
            Log.d("HTTPCLIENT", e.getLocalizedMessage());
        }
}

Please help me and let me know the exact problem or mistake I'm doing. This is my Logcat output :

01-04 13:48:50.293: E/STRING(2940): [[{"name":"Banking","data":[{"vendor_name":"SBI","vendor_id":"1"},{"vendor_name":"ICICI","vendor_id":"2"},{"vendor_name":"BOB","vendor_id":"3"}]},{"name":"Telecom","data":[{"vendor_name":"AirTel","vendor_id":"4"},{"vendor_name":"Vodafone","vendor_id":"5"}]},{"name":"Automobile","data":[{"vendor_name":"Hyundai","vendor_id":"6"}]},{"name":"Hotels","data":[]}]]
01-04 13:48:50.303: E/name(2940): Banking
01-04 13:48:50.303: D/AndroidRuntime(2940): Shutting down VM
01-04 13:48:50.303: W/dalvikvm(2940): threadid=1: thread exiting with uncaught exception (group=0x41da1300)
01-04 13:48:50.313: E/AndroidRuntime(2940): FATAL EXCEPTION: main
01-04 13:48:50.313: E/AndroidRuntime(2940): java.lang.NoSuchMethodError: org.json.JSONArray.<init>
01-04 13:48:50.313: E/AndroidRuntime(2940):     at com.infoz.tapme.Companies.connect(Companies.java:119)
01-04 13:48:50.313: E/AndroidRuntime(2940):     at com.infoz.tapme.Companies.onCreate(Companies.java:82)
01-04 13:48:50.313: E/AndroidRuntime(2940):     at android.app.Activity.performCreate(Activity.java:5008)
01-04 13:48:50.313: E/AndroidRuntime(2940):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
01-04 13:48:50.313: E/AndroidRuntime(2940):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
01-04 13:48:50.313: E/AndroidRuntime(2940):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
01-04 13:48:50.313: E/AndroidRuntime(2940):     at android.app.ActivityThread.access$600(ActivityThread.java:130)
01-04 13:48:50.313: E/AndroidRuntime(2940):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
01-04 13:48:50.313: E/AndroidRuntime(2940):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-04 13:48:50.313: E/AndroidRuntime(2940):     at android.os.Looper.loop(Looper.java:137)
01-04 13:48:50.313: E/AndroidRuntime(2940):     at android.app.ActivityThread.main(ActivityThread.java:4745)
01-04 13:48:50.313: E/AndroidRuntime(2940):     at java.lang.reflect.Method.invokeNative(Native Method)
01-04 13:48:50.313: E/AndroidRuntime(2940):     at java.lang.reflect.Method.invoke(Method.java:511)
01-04 13:48:50.313: E/AndroidRuntime(2940):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
01-04 13:48:50.313: E/AndroidRuntime(2940):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-04 13:48:50.313: E/AndroidRuntime(2940):     at dalvik.system.NativeStart.main(Native Method)

JSON Data

[
    [
        {
            "name": "Banking",
            "data": [
                {
                    "vendor_name": "SBI",
                    "vendor_id": "1"
                },
                {
                    "vendor_name": "ICICI",
                    "vendor_id": "2"
                },
                {
                    "vendor_name": "BOB",
                    "vendor_id": "3"
                }
            ]
        },
        {
            "name": "Telecom",
            "data": [
                {
                    "vendor_name": "AirTel",
                    "vendor_id": "4"
                },
                {
                    "vendor_name": "Vodafone",
                    "vendor_id": "5"
                }
            ]
        },
        {
            "name": "Automobile",
            "data": [
                {
                    "vendor_name": "Hyundai",
                    "vendor_id": "6"
                }
            ]
        },
        {
            "name": "Hotels",
            "data": []
        }
    ]
]
4
  • 1
    have you try using JSONArray json1=obj.getJSONArray("data"); ?? Commented Sep 15, 2014 at 13:02
  • yess...but didn't get output...!!! :( Commented Sep 15, 2014 at 13:03
  • try the code i have posted Commented Sep 15, 2014 at 13:20
  • your json starts array->array->obj, not array->obj. why the unnecessary array? Commented Sep 15, 2014 at 13:54

2 Answers 2

1

try this i have done some changes in your connect method

private void connect() {
    String data;
    JSONArray json;
    try {
        DefaultHttpClient client = new DefaultHttpClient();
        HttpGet request = new HttpGet(
                "http://demo.tugain.com/tapme/RetriveAll.php?q=cat");
        HttpResponse response = client.execute(request);
        HttpEntity entity = response.getEntity();
        data = EntityUtils.toString(entity);
        Log.e("STRING", data);

        try {
            JSONObject obj = null;

            json = new JSONArray(data);
            JSONArray actualJson = json.getJSONArray(0);

            for (int i = 0; i < actualJson.length(); i++) {
                obj = actualJson.getJSONObject(i);

                String name = obj.getString("name");
                Log.e("STRING", name);
                // mAdapter.addSectionHeaderItem(name);
                // setListAdapter(mAdapter);

                // JSONArray json1=new JSONArray("data");
                JSONArray json1 =obj.getJSONArray("data");

                for (int j = 0; j < json1.length(); j++) {

                JSONObject obj1= json1.getJSONObject(j);
                    String CompName= obj1.getString("vendor_name");

                    Log.e("STRING", CompName);
                    // CompID=obj1.getString("vendor_id");
                    // Log.e("vender",CompName);
                    // Log.e("id",CompID);
                }
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
    } catch (ClientProtocolException e) {
        Log.d("HTTPCLIENT", e.getLocalizedMessage());
    } catch (IOException e) {
        Log.d("HTTPCLIENT", e.getLocalizedMessage());
    }
}
Sign up to request clarification or add additional context in comments.

Comments

0

Try This code...

    try
        {
            String data ="YOUR JSON ARRAY RESULT";
            JSONObject obj=null;
            JSONArray jsonArr =new JSONArray(data).getJSONArray(0);

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

                String name=jsonArr.getJSONObject(i).getString("name");
                Log.e("name",name);

                //mAdapter.addSectionHeaderItem(name);
                //setListAdapter(mAdapter);

                JSONArray dataArray =new JSONArray();
                dataArray = jsonArr.getJSONObject(i).getJSONArray("data");

                for(int j=0;j<dataArray.length();j++)
                {
                    JSONObject dataObject = new JSONObject();
                    dataObject = dataArray.getJSONObject(j);
                    String CompName= dataObject.getString("vendor_name");
                    String CompID= dataObject.getString("vendor_id");

                    Log.e("vender",CompName);
                    Log.e("id",CompID);

                }
            }
        }
        catch (JSONException e) 
        {
            e.printStackTrace();
        }

modify as per your need in this code...

Always try to use Object Name or Array name through which identify its use.. don't use some messy names..

this may help you..

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.