Volley - 使用 JSONArrayRequest 发送 POST 请求

2022-09-02 11:17:35

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

JsonObjectRequest有一个构造函数,它采用一个方法和一组参数

JsonObjectRequest(int method, java.lang.String url, JSONObject jsonRequest, Response.Listener<JSONObject> listener, Response.ErrorListener errorListener) 

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

JsonArrayRequest(java.lang.String url, Response.Listener<JSONArray> listener, Response.ErrorListener errorListener) 

如何发送包含数据的 POST 请求?


答案 1

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

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

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

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

编辑:

我叫它!在我回答这个问题后,他们花了将近两年的时间,但Volley团队于2015年3月19日将此构造函数添加到存储库中。你猜怎么着?这是确切的语法。


答案 2

我很懒惰,没有自己构建Volley库(只是使用了.jar),因此没有源代码......所以在匿名新我添加了这些函数:JSONArrayRequest

            // 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;
            }

推荐