如何将参数传递给Volley的JsonArrayRequest

时间:2016-10-27 10:36:36

标签: java android android-volley

getRequest方法试图通常处理 GET 请求。

JsonArrayRequest接受JSONArray对象,我可以使用此对象'JSONArray'来应用查询字符串参数,还是我必须自己修改网址。

public static void getRequest(final String tag, String url, JSONArray params, final GetRequest consumer, final ResponseFilter filt){
    Log.d("Server",url);
    String REQUEST_TAG = "GETMultiRequest";
    JsonArrayRequest jsArrRequest = new JsonArrayRequest
            (Request.Method.GET, url, params, new Response.Listener<JSONArray>() {

                @Override
                public void onResponse(JSONArray response) {
                    Log.d("Response", "received successfully");
                    consumer.update( filt.filter(response), tag );
                }

            }, new Response.ErrorListener(){
                @Override
                public void onErrorResponse(VolleyError error) {
                    VolleyLog.d(TAG, "Error: " + error.getMessage());
                }
            });
    AppRequestSingleton.getInstance( ((Activity)consumer).getApplicationContext() ).addToRequestQueue(jsArrRequest, REQUEST_TAG);
}

1 个答案:

答案 0 :(得分:0)

您可以使用StringRequest而不是使用JsonArrayRequest和Override getParam(),也可以将参数从JSONArray更改为HashMap

代码应该是:

public static void getRequest (final String tag, String url, final JSONArray params, final GetRequest consumer, final ResponseFilter filt) {

        // Converting JSONArray parameters into HashMap
        final HashMap<String, String> pairs = new HashMap<String, String> ();
        for (int i = 0; i < params.length (); i++) {
            JSONObject j = params.optJSONObject (i);
            Iterator it = j.keys ();
            while (it.hasNext ()) {
                String n = (String) it.next ();
                try {
                    pairs.put (n, j.getString (n));
                } catch (JSONException e) {
                    e.printStackTrace ();
                }
            }
        }

        Log.d ("Server", url);
        String REQUEST_TAG = "GETMultiRequest";
        StringRequest strRequest = new StringRequest (Request.Method.GET, url,
                new Response.Listener<String> () {
                    @Override
                    public void onResponse (String resp) {
                        try {
                            JSONArray response = new JSONArray (resp);
                            Log.d ("Response", "received successfully");
                            consumer.update (filt.filter (response), tag);
                        } catch (JSONException e) {
                            e.printStackTrace ();
                        }
                    }
                },
                new Response.ErrorListener () {
                    @Override
                    public void onErrorResponse (VolleyError error) {
                        VolleyLog.d (TAG, "Error: " + error.getMessage ());
                    }
                }) {
            @Override
            protected Map<String, String> getParams () throws AuthFailureError {
                return pairs;
            }
        };
        AppRequestSingleton.getInstance (((Activity) consumer).getApplicationContext ()).addToRequestQueue (strRequest, REQUEST_TAG);
    }