如何修复“不是原始数组”
How fix " Not a primitive array"
我正在尝试解析这个 json。
[
{
"id": 2,
"name": "612",
"code": "auditorium 612"
},
{
"id": 3,
"name": "613",
"code": "auditorium 613"
}
]
JSONException returns 错误“不是原始数组”。我尝试解析 JsonObjectRequest,但出现了另一个错误。最后我来到选项 JsonArrayRequest
W/System.err: org.json.JSONException: Not a primitive array: class org.json.JSONArray
at org.json.JSONArray.<init>(JSONArray.java:116)
at com.example.dyplom.MainActivity.onResponse(MainActivity.java:126)
at com.example.dyplom.MainActivity.onResponse(MainActivity.java:122)
at com.android.volley.toolbox.JsonRequest.deliverResponse(JsonRequest.java:90)
at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:102)
at android.os.Handler.handleCallback(Handler.java:790)
W/System.err: at android.os.Handler.dispatchMessage(Handler.java:99)
W/System.err: at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
W/System.err: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
这是解析器方法。
private void loadStrings()
{
String url_head = "http://10.0.2.2:8080/rStrings";
JsonArrayRequest request = new JsonArrayRequest(Request.Method.GET,url_head, null, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
try {
JSONArray jsonArray_string_list = new JSONArray(response);
main_name_rString = new String[jsonArray_string_list.length()];
main_code_rString = new String[jsonArray_string_list.length()];
for (int i = 0; i < jsonArray_string_list.length();i++){
JSONObject string_params_string_list = jsonArray_string_list.getJSONObject(i);
Long string_id = string_params_string_list.getLong("id");
String string_name = string_params_string_list.getString("name");
String string_code = string_params_string_list.getString("code");
main_id_rSting[i]=string_id;
main_name_rString[i] = string_name;
main_code_rString[i] = string_code;
Log.i("Id", String.valueOf(main_id_rSting[i]));
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(), "Error", Toast.LENGTH_SHORT).show();
error.printStackTrace();
}
});
mQueue.add(request);
}
我看了类似的问题,但我没有真正找到任何东西。我该如何解决?可能我没看懂。
如果 onResponse 方法已经收到(JSONArray 响应),则无需在代码的下一行中再次创建新的 JSONArray。如果我能看到发生错误的行,那将会有所帮助。
我正在尝试解析这个 json。
[
{
"id": 2,
"name": "612",
"code": "auditorium 612"
},
{
"id": 3,
"name": "613",
"code": "auditorium 613"
}
]
JSONException returns 错误“不是原始数组”。我尝试解析 JsonObjectRequest,但出现了另一个错误。最后我来到选项 JsonArrayRequest
W/System.err: org.json.JSONException: Not a primitive array: class org.json.JSONArray
at org.json.JSONArray.<init>(JSONArray.java:116)
at com.example.dyplom.MainActivity.onResponse(MainActivity.java:126)
at com.example.dyplom.MainActivity.onResponse(MainActivity.java:122)
at com.android.volley.toolbox.JsonRequest.deliverResponse(JsonRequest.java:90)
at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:102)
at android.os.Handler.handleCallback(Handler.java:790)
W/System.err: at android.os.Handler.dispatchMessage(Handler.java:99)
W/System.err: at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
W/System.err: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
这是解析器方法。
private void loadStrings()
{
String url_head = "http://10.0.2.2:8080/rStrings";
JsonArrayRequest request = new JsonArrayRequest(Request.Method.GET,url_head, null, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
try {
JSONArray jsonArray_string_list = new JSONArray(response);
main_name_rString = new String[jsonArray_string_list.length()];
main_code_rString = new String[jsonArray_string_list.length()];
for (int i = 0; i < jsonArray_string_list.length();i++){
JSONObject string_params_string_list = jsonArray_string_list.getJSONObject(i);
Long string_id = string_params_string_list.getLong("id");
String string_name = string_params_string_list.getString("name");
String string_code = string_params_string_list.getString("code");
main_id_rSting[i]=string_id;
main_name_rString[i] = string_name;
main_code_rString[i] = string_code;
Log.i("Id", String.valueOf(main_id_rSting[i]));
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(), "Error", Toast.LENGTH_SHORT).show();
error.printStackTrace();
}
});
mQueue.add(request);
}
我看了类似的问题,但我没有真正找到任何东西。我该如何解决?可能我没看懂。
如果 onResponse 方法已经收到(JSONArray 响应),则无需在代码的下一行中再次创建新的 JSONArray。如果我能看到发生错误的行,那将会有所帮助。