以JSONObject为参数的Volley JSONArrayRequest [英] Volley JSONArrayRequest with JSONObject as parameter

查看:127
本文介绍了以JSONObject为参数的Volley JSONArrayRequest的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要使用JSONObject进行请求,如下所示:

I need to make a request with a JSONObject as follows:

{
    'LangIDs': [1, 2],
    'GenreIDs': [4],
    'LowPrice': 0,
    'HighPrice': 999,
    'SearchTerms': [],
    'Pagination': {
        'PageNumber': 0,
        'PageLength': 10
    }
}

期望的响应是一个JSONArray.使用 Volley ,我无法使用JSONObject参数创建JsonArrayRequest.

The expected response is a JSONArray. Using Volley, I can't make a JsonArrayRequest with a JSONObject parameter.

在我以这种方式发出请求之前:

Before I made the request this way:

StringRequest jsonObjectRequest = new StringRequest(Request.Method.POST, url, new Response.Listener < String > () {
    @Override
    public void onResponse(String response) {
        JSONObject jsonObject;
        int id;
        String bookName;
        String Url;
        try {
            responseArray = new JSONArray(response);
        } catch (JSONException e) {

        }

        for (int i = 0; i < response.length(); i++) {
            try {
                jsonObject = responseArray.getJSONObject(i);
                id = jsonObject.getInt(Constants.KEY_ID);
                bookName = jsonObject.getString(Constants.KEY_BOOKNAME);
                Url = imgUrl + jsonObject.getString(Constants.KEY_IMG_URL);
                books.add(new Book(id, bookName, Url));

            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
        mAdapter.updateGrid(books);
        Log.v("Response", response);
    }
}, new Response.ErrorListener() {@
    Override
    public void onErrorResponse(VolleyError error) {
        Log.e("Error:", error.getMessage());
    }
}) {@
    Override
    protected Map < String, String > getParams() throws AuthFailureError {
        HashMap < String, String > params = new HashMap < > ();
        String message = getArguments().getString(Constants.KEY_FILTER_VALUES);
        Log.v("FilterMessage", message);
        params.put(Constants.KEY_PAGENUMBER, String.valueOf(0));
        params.put(Constants.KEY_PAGELENGTH, String.valueOf(10));
        return params;
    }
};

但是现在是包含JSONObject的JSONObject.

But now it is JSONObject that contains JSONObject.

现在如何使用Volley发出此请求?

How now I can make this request using Volley?

推荐答案

我创建了一个自定义的凌空请求,该请求接受JSONObject作为参数.

I created a custom volley request that accepts a JSONObject as parameter.

CustomJsonArrayRequest.java

 public class CustomJsonArrayRequest extends JsonRequest<JSONArray> {

        /**
         * Creates a new request.
         * @param method the HTTP method to use
         * @param url URL to fetch the JSON from
         * @param jsonRequest A {@link JSONObject} to post with the request. Null is allowed and
         *   indicates no parameters will be posted along with request.
         * @param listener Listener to receive the JSON response
         * @param errorListener Error listener, or null to ignore errors.
         */
        public CustomJsonArrayRequest(int method, String url, JSONObject jsonRequest,
                                Listener<JSONArray> listener, ErrorListener errorListener) {
            super(method, url, (jsonRequest == null) ? null : jsonRequest.toString(), listener,
                    errorListener);
        }

        @Override
        protected Response<JSONArray> parseNetworkResponse(NetworkResponse response) {
            try {
                String jsonString = new String(response.data,
                        HttpHeaderParser.parseCharset(response.headers, PROTOCOL_CHARSET));
                return Response.success(new JSONArray(jsonString),
                        HttpHeaderParser.parseCacheHeaders(response));
            } catch (UnsupportedEncodingException e) {
                return Response.error(new ParseError(e));
            } catch (JSONException je) {
                return Response.error(new ParseError(je));
            }
        }
    }

如何使用?

JSONObject body = new JSONObject();
// Your code, e.g. body.put(key, value);
CustomJsonArrayRequest req = new CustomJsonArrayRequest(Request.Method.POST, url, body, success, error);

这篇关于以JSONObject为参数的Volley JSONArrayRequest的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆