繁体   English   中英

如何在Volley中以表单数据发送JSON数组

[英]How to send JSON Array in form-data in volley

我无法使用volley在表单数据中将JSON数组发送到服务器。 我的代码如下:

StringRequest sr = new StringRequest(Request.Method.POST, url,
        new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Log.e("response_det", response);
            }
        },
        new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("response_det", "" + error.getMessage() + "," + error.toString());
            }
        }) {
    @Override
    protected Map<String, String> getParams() {
        Map<String, String> params = new HashMap<>();
        params.put("phone", "XXXXXXXXXX");
        params.put("booking_id[0]", "27829929");
        params.put("booking_id[1]", "37798393");
        return params;
    }

    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {

        Map<String, String> params = new HashMap<>();

        params.put("Content-Type", "application/x-www-form-urlencoded");

        return params;
    }
};

我附上邮递员样本的屏幕截图 在此处输入图片说明

所以基本上我正在发送两个参数,一个是普通字符串,另一个是JSONArray。 请告诉我我在做什么错。

我正在https://stackoverflow.com/a/27091088/3022836发布我唯一的区别是我有一个额外的JSON数组。

使用下面的代码发送jsonArray

subsIdArraylist = pauseListAdapter.getIdList();// for example 
            quantityArray = pauseListAdapter.getQntyArray(); // for example

            JSONArray jsonArray = new JSONArray();

            if (subsIdArraylist.size() > 0) {
                for (int i = 0; i < subsIdArraylist.size(); i++) {
                    try {

                        JSONObject jsonObject = new JSONObject();
                        jsonObject.put(AppConstants.KEY_ID, Integer.parseInt(subsIdArraylist.get(i)));
                        jsonObject.put(AppConstants.KEY_QTY, quantityArray.get(i));
                        jsonArray.put(i, jsonObject);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }
    and then in your getParams method put this jsonarray <br>
@Override
protected Map<String, String> getParams() {
    Map<String, String> params = new HashMap<>();
    params.put("phone", "XXXXXXXXXX");
    params.put("booking_id", jsonArray.toString());

    return params;
}

喜欢@Sandeep dhiman的建议,然后覆盖contentType作为应用程序json

public String getBodyContentType()
    {
        return "application/json";
    }

它对Json Array正常工作

final String mRequestBody = jsonArray.toString();

        StringRequest request = new StringRequest(Request.Method.POST, CreateChatRoomUrl, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                if (!response.equals(null)) {
                    Log.e("Response", response);
                } else {
                    Log.e("Response"," Data Null");
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("error Response", "" + error);
            }
        }) {
            @Override
            public byte[] getBody() throws AuthFailureError {
                try {
                    return mRequestBody == null ? null : mRequestBody.getBytes("utf-8");
                } catch (UnsupportedEncodingException uee) {
                    VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", mRequestBody, "utf-8");
                    uee.printStackTrace();
                    return null;
                }
            }
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                Map<String, String> params = new HashMap<String, String>();
                params.put("Content-Type", "application/json; charset=UTF-8"); 
                return params;
            }
        };
        RequestQueue queue = Volley.newRequestQueue(context);
        queue.add(request);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM