android 中的 java.lang.NoSuchMethodError :org. json.JSONArray 错误

标签 java android json eclipse

在我的应用程序中,我尝试通过 JSON 解析数据并尝试在 android 的 ListView 中显示。但我在解析数据时收到 java.lang.NoSuchMethodError:org.json.JSONArray 错误。这是我用来解析数据的链接。 http://demo.tugain.com/tapme/RetriveAll.php?q=cat

为此,我使用了以下代码:

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

请帮助我,让我知道我正在做的确切问题或错误。这是我的 Logcat 输出:

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 数据

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

最佳答案

试试这个,我对您的连接方法做了一些更改

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

关于android 中的 java.lang.NoSuchMethodError :org. json.JSONArray 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25848665/

相关文章:

javascript - 协作式 JSON 查看器/解析器

mysql - 从json数据创建mysql数据库

java - PHP 帖子 Android 帖子

java - Weblogic 上带有 Ant 脚本的示例 EJB 3.0 MDB

java - 使用 ch.ethz.ssh2.Connection 使用 JAVA 进行 SSH 连接

android - 使用内部的 NestedScrollView 处理 VerticalViewPager 的滚动

json - 如何从 MongoDB 获取数据并将其作为 Golang 中的 JSON 发送到 API

java - 删除链表中的重复项(按升序排列)

java - 保存 sharedPreference 文件

java - Android 中的默认配置菜单