首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Volley -使用JSONArrayRequest发送POST请求

Volley -使用JSONArrayRequest发送POST请求
EN

Stack Overflow用户
提问于 2013-08-05 07:50:48
回答 9查看 59.1K关注 0票数 19

我正在使用Volley与API进行交互。我需要向返回JSON数组的服务发送post请求(带参数)。

JsonObjectRequest有一个构造函数,它接受一个方法和一组参数

代码语言:javascript
复制
JsonObjectRequest(int method, java.lang.String url, JSONObject jsonRequest, Response.Listener<JSONObject> listener, Response.ErrorListener errorListener) 

但是,JSONArrayRequest (我需要的那个)只有一个表单构造函数

代码语言:javascript
复制
JsonArrayRequest(java.lang.String url, Response.Listener<JSONArray> listener, Response.ErrorListener errorListener) 

我怎样才能发送一个带数据的POST请求呢?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2013-08-05 15:11:47

他们可能会在以后添加它,但在此期间,您可以自己添加所需的构造函数:

代码语言:javascript
复制
public JsonArrayRequest(int method, String url, JSONObject jsonRequest,
        Listener<JSONArray> listener, ErrorListener errorListener) {
    super(method, url, (jsonRequest == null) ? null : jsonRequest.toString(), 
        listener, errorListener);
}

这没有经过测试,尽管我认为这没有理由不起作用,因为实现细节在超类中:JsonRequest

试一试,看看它是否有效。

编辑:

我说了算!在我回答这个问题之后,他们花了将近两年的时间,但是排球团队在2015年3月19日将这个构造器添加到了repo中。你猜怎么着?这就是确切的语法。

票数 50
EN

Stack Overflow用户

发布于 2014-08-01 22:22:17

我很懒,没有自己构建Volley库(只是使用.jar),因此在匿名的新JSONArrayRequest中没有源code...so,我添加了以下函数:

代码语言:javascript
复制
            // NO CONSTRUCTOR AVAILABLE FOR POST AND PARAMS FOR JSONARRAY!
            // overridden the necessary functions for this
            @Override
            public byte[] getBody() {
                try {
                    return paramsArray.toString().getBytes("utf-8");
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
                return null;
            }

            @Override
            public int getMethod() {
                return Method.POST;
            }
票数 7
EN

Stack Overflow用户

发布于 2015-02-22 01:11:25

这段代码将产生你想要的东西

代码语言:javascript
复制
    Volley.newRequestQueue(context).add(
            new JsonRequest<JSONArray>(Request.Method.POST, "url/", null,
                    new Response.Listener<JSONArray>() {
                        @Override
                        public void onResponse(JSONArray response) {

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

                        }
                    }) {
                @Override
                protected Map<String, String> getParams() {
                    Map<String, String> params = new HashMap<String, String>();
                    params.put("param1", "one");
                    params.put("param2", "two");
                    return params;
                }

                @Override
                protected Response<JSONArray> parseNetworkResponse(
                        NetworkResponse response) {
                    try {
                        String jsonString = new String(response.data,
                                HttpHeaderParser
                                        .parseCharset(response.headers));
                        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));
                    }
                }
            });
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18048806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档