[英]Android JAVA : Convert org.json.JSONArray to java.lang.String[]
[英]java.lang.NoSuchMethodError:org.json.JSONArray error in android
在我的应用程序中,我试图通过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());
}
}
试试这个代码...
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();
}
根据您的需要在此代码中进行修改...
始终尝试使用“对象名称”或“数组名称”来标识其用途..不要使用一些混乱的名称。
这可能对您有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.