如何在Android上使用Volley检索没有名称的JSON?

时间:2017-02-27 20:13:20

标签: android json android-volley

我有一个JSON可以检索数据库的所有用户。为简化起见,我将展示前两个用户:

[
    {
       "id":"1",
       "name":"Peter",
       "age":"25"
    },
    {
       "id":"2",
       "name":"Andrew",
       "age":"32"
    },
    ...
]

正如您所看到的,它是一个没有名称的数组,其中包含一些JSONObjects,因此我尝试从Android检索这些数据,Volley库通过整个数组但没有成功。

这是我目前的代码:

RequestQueue queue = Volley.newRequestQueue(getContext());

JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET, url, new Response.Listener<JSONArray>() {
    @Override
    public void onResponse(JSONArray response) {
         try{
             if (response != null) {
                 for(int i = 0; i < response.length(); i++){
                     JSONObject obj = response.getJSONObject(i);
                 }
             }
         }catch(Exception e){  
             e.printStackTrace();  
         }
    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
       Log.e("LOG", error.toString());
    }
});

queue.add(jsonArrayRequest);

它总是给我以下错误:

  

未处理的异常:org.json.JSONException

在尝试检索JSONArray之前,我还尝试检索JSONObject,但由于方法

,它不允许我
JSONArray json = response.getJSONArray(0);

也向我提出了我之前指出的同样错误。

我找了很多例子,我看不出我的问题在哪里。

我做错了什么?

提前致谢!

3 个答案:

答案 0 :(得分:1)

您没有处理JSONException。

试一试。

StringRequest request = new StringRequest(Method.GET, url, 
    new Response.Listener<String>() {

        @Override
        public void onResponse(String response) 
            try {
                JSONArray jsonArray = new JSONArray(response);
                for (int i = 0; i < jsonArray.length(); i++) {
                    JSONObject jo = jsonArray.getJSONObject(i);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

答案 1 :(得分:1)

  

无法解析构造函数“JsonArrayRequest(int, java.lang.String, anonymous com.android.volley.Response.Listener<org.json.JSONArray>, anonymous com.android.volley.Response.ErrorListener)

错误不是谎言。该请求不接受Method类型。

JsonArrayRequest(
    String url, 
    Response.Listener<JSONArray> listener, 
    Response.ErrorListener errorListener)
另一方面,

StringRequest确实如此。

StringRequest(
    int method, 
    String url, 
    Response.Listener<String> listener, 
    Response.ErrorListener errorListener)

关于,

  

未处理的异常:org.json.JSONException

response.getJSONObject将抛出该异常,因此您必须使用try-catch。

if (response != null) {
    try {
        for (int i = 0; ...) {
            JSONObject jo = response.getJSONObject(i);
            // use 'jo'
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }
} 

答案 2 :(得分:0)

您应该在final JsonArrayRequest中添加final 祝你好运!

最终JsonArrayRequest jsonArrayRequest =新的JsonArrayRequest(Request.Method.GET,URL,空,新的Response.Listener(){ @Override 公共无效onResponse(JSONArray response){ 尝试{ if(response!= null){ for(int i = 0; i

    mQueue.add(jsonArrayRequest);