无法应用JSON数组请求错误侦听器

时间:2017-11-13 08:40:29

标签: java android json api android-volley

我是Android编程的新手,我使用Google Volley库来调用API,现在我的Android代码存在一些问题。发生了JSON错误  here

这是我的代码:

private void loadJson()
    {
        pd.setMessage("Mengambil Data");
        pd.setCancelable(false);
        pd.show();

        JsonArrayRequest reqData = new JsonArrayRequest(Request.Method.POST, ServerAPI.URL_DATA,null,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        pd.cancel();
                        Log.d("volley","response : " + response.toString());
                        for(int i = 0 ; i < response.length(); i++)
                        {
                            try {
                                JSONObject data = response.getJSONObject(i);
                                ModelData md = new ModelData();
                                md.setNpm(data.getString("npm"));
                                md.setNama(data.getString("nama"));
                                md.setProdi(data.getString("prodi"));
                                md.setFakultas(data.getString("fakultas"));
                                mItems.add(md);
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                        mAdapter.notifyDataSetChanged();
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        pd.cancel();
                        Log.d("volley", "error : " + error.getMessage());
                    }
                });

        AppController.getInstance().addToRequestQueue(reqData);
    }

4 个答案:

答案 0 :(得分:2)

您在JSONArryRequest中传递了错误的参数,您需要传递URL(String)和您的响应侦听器。

   JsonArrayRequest request = new JsonArrayRequest(Request.Method.POST,"http://example.com/feed.json",
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray jsonArray) {
                             //Your code
                       }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError volleyError) {
                        Toast.makeText(MainActivity.this, "Unable to fetch data: " + volleyError.getMessage(), Toast.LENGTH_SHORT).show();
                    }
    });

答案 1 :(得分:0)

删除Request.Method.POST的第一个参数。 JsonArrayRequest对象在构造函数中有三个参数。 URLListenerErrorListener

JsonArrayRequest req = new JsonArrayRequest(url,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {

                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {

                    }
                });

答案 2 :(得分:0)

您似乎将错误的参数传递给JsonArrayRequest()。 根据找到的文档here,方法签名为public JsonArrayRequest(String url, Response.Listener<JSONArray> listener, Response.ErrorListener errorListener),您正在通过(int, String, null, Response.Listener<JSONArray>, Response.ErrorListener)

删除Request.Method.POSTnull,你应该好好去。

答案 3 :(得分:0)

JsonArrayRequest中的参数是错误的(您必须为URL传递一个String)。 尝试这样的事情:

private void loadJson()
{
    pd.setMessage("Mengambil Data");
    pd.setCancelable(false);
    pd.show();

    JsonArrayRequest reqData = new JsonArrayRequest(ServerAPI.URL_DATA,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    pd.cancel();
                    Log.d("volley","response : " + response.toString());
                    for(int i = 0 ; i < response.length(); i++)
                    {
                        try {
                            JSONObject data = response.getJSONObject(i);
                            ModelData md = new ModelData();
                            md.setNpm(data.getString("npm"));
                            md.setNama(data.getString("nama"));
                            md.setProdi(data.getString("prodi"));
                            md.setFakultas(data.getString("fakultas"));
                            mItems.add(md);
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                    mAdapter.notifyDataSetChanged();
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    pd.cancel();
                    Log.d("volley", "error : " + error.getMessage());
                }
            });

    AppController.getInstance().addToRequestQueue(reqData);
}