Ruchir
Ruchir

Reputation: 1122

java.lang.NoSuchMethodError:org.json.JSONArray error in android

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": []
        }
    ]
]

Upvotes: 0

Views: 6052

Answers (2)

Pragnesh Ghoda  シ
Pragnesh Ghoda シ

Reputation: 8337

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..

Upvotes: 0

Meenal
Meenal

Reputation: 2877

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

Upvotes: 1

Related Questions