【问题标题】:How to send array type parameters via com.android.volley.Request如何通过 com.android.volley.Request 发送数组类型参数
【发布时间】:2015-03-04 09:07:02
【问题描述】:

现在,我正在制作一个 Android 应用,我对这个标题有疑问。

我使用 com.android.volley API 发送查询参数。为了发送参数,我创建了一个扩展 com.android.volley.Request 的类 并打算 oderride 这个方法:

受保护的地图 getParams() 抛出 AuthFailureError

但之后,我需要发送数组类型参数,如

x[]=10&x[]=20&x[]=30

但是我无法通过上述方法getParams()发送这些数组类型参数。 因为一个映射只能有一个字符串“x[]”的键值。

请给我一些关于如何发送数组类型参数的建议 通过 com.android.volley.Request 。

问候。

【问题讨论】:

    标签: java android android-volley


    【解决方案1】:

    我想我可以用代码更好地解释你。假设你需要发送一个包含 n 个元素的数组。那么你应该发送它。

    params.put("x[0]","value1");
    params.put("x[1]","value2");
       .
       .
       .
    params.put("x[n-1]","valuen");
    

    从完成的 getParams 方法返回参数。希望它会有所帮助。谢谢。

    【讨论】:

    • 感谢您的回答。我将确认我的应用程序向其发送请求的服务器系统可以接受具有明确索引号的数组参数,例如 [0]、[1] ... [n-1]。
    【解决方案2】:

    如果我们查看请求类,我们可以找到以下函数:

    /**
     * Returns the raw POST or PUT body to be sent.
     *
     * @throws AuthFailureError in the event of auth failure
     */
    public byte[] getBody() throws AuthFailureError {
        Map<String, String> params = getParams();
        if (params != null && params.size() > 0) {
            return encodeParameters(params, getParamsEncoding());
        }
        return null;
    }
    
    /**
     * Converts <code>params</code> into an application/x-www-form-urlencoded encoded string.
     */
    private byte[] encodeParameters(Map<String, String> params, String paramsEncoding) {
        StringBuilder encodedParams = new StringBuilder();
        try {
            for (Map.Entry<String, String> entry : params.entrySet()) {
                encodedParams.append(URLEncoder.encode(entry.getKey(), paramsEncoding));
                encodedParams.append('=');
                encodedParams.append(URLEncoder.encode(entry.getValue(), paramsEncoding));
                encodedParams.append('&');
            }
            return encodedParams.toString().getBytes(paramsEncoding);
        } catch (UnsupportedEncodingException uee) {
            throw new RuntimeException("Encoding not supported: " + paramsEncoding, uee);
        }
    }
    

    所以你可以覆盖byte[] getBody() throws AuthFailureError。创建自己的 body 并将其转换为 byte[] 并返回。

    【讨论】:

    • 感谢您的回答。我懂了。使用 getBody(),我们可以将查询字符串作为更原始级别的 body 而不是 Map。所以,在那个方法中,我会尝试构建像 "x[]=10&x[]=20&x[]=30" 这样的字符串并返回它的字节[]。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 2015-02-12
    相关资源
    最近更新 更多