将ArrayList放入JsonObject的参数中

5

我需要使用Volley框架进行请求,这是一个带有JSONObject的POST请求。

我需要传递一个字符串和一个JSONArray,但我该如何做呢?

我从以下内容开始:

 private String mUrl;
    private ArrayList<String> mUrlDove;

  HashMap<String, String> params = new HashMap<String, String>();
            params.put("url", mUrl);
            params.put("urlDove", mUrlDove); ---> Wrong because mUrlDove is not a String


            mUrl = app.getInstance().getmUrlRestWS() + getString(R.string.path);

            JsonObjectRequest mRequest = new JsonObjectRequest(
                    mUrl, new JSONObject(params),
                    createMyReqSuccessListener(),
                    createMyReqErrorListener()) {
                @Override
                public Map<String, String> getHeaders() throws AuthFailureError {
                    return app.getInstance().createBasicAuthHeader();
                }
            };

如果我要在浏览器中尝试该功能,我必须进行以下设置:
{
  "url": "www.secret.com",
  "urlDove" : [ "www.google.com","www.yahoo.com"]
}
3个回答

5

您需要先创建一个 JSON 数组,然后将其存储。

private String mUrl;
private ArrayList<String> mUrlDove;

HashMap<String, String> params = new HashMap<String, String>();
        params.put("url", mUrl);
        JSONArray jsArray = new JSONArray(mUrlDove);
        params.put("urlDove", jsArray.toString()); 

        mUrl = app.getInstance().getmUrlRestWS() + getString(R.string.path);

        JsonObjectRequest mRequest = new JsonObjectRequest(
                mUrl, new JSONObject(params),
                createMyReqSuccessListener(),
                createMyReqErrorListener()) {
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                return app.getInstance().createBasicAuthHeader();
            }
        };

com.android.volley.ParseError: org.json.JSONException: 无法将类型为java.lang.String的Created值转换为JSONObject。 - CodeGuru
我需要帮助,这里是链接:https://dev59.com/uVYO5IYBdhLWcg3wEddO - chris

5

尝试使用JSONObject而不是HashMap。

JSONObject params = new JSONObject();
params.put("url", "www.secret.com");

JSONArray urlDove = new JSONArray();
urlDove.put("www.google.com");
urlDove.put("www.yahoo.com");

params.put("urlDove", urlDove);


JsonObjectRequest mRequest = new JsonObjectRequest(
                mUrl, params,
                createMyReqSuccessListener(),
                createMyReqErrorListener()) {
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                return app.getInstance().createBasicAuthHeader();
            }
        };

用于解析JSON的参考资料:https://dev59.com/eGMm5IYBdhLWcg3wKsrO#17810270


2

JSONObject可以接受Java对象,尝试使用它。

Map<String,Object> 

类似这样的内容:

    String mUrl;  //initialized somewhere else
    ArrayList<String> mUrlDove;  //initialized somewhere else

    Map<String, Object> jsonParams = new HashMap<>();
    jsonParams.put("url", mUrl);
    jsonParams.put("urlDove", mUrlDove);

    JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, url, new JSONObject(jsonParams),
            new Response.Listener<JSONObject>()
            {
                @Override
                public void onResponse(JSONObject response)
                {
                    Log.d("Volley Response: ", response.toString()); 
                    //do the other stuff you need...
                }
            },
            new Response.ErrorListener()
            {
                @Override
                public void onErrorResponse(VolleyError error)
                {
                    if (null != error.networkResponse)
                    {
                        Log.d(" Volley Error Code: ", "" + error.networkResponse.statusCode);
                       //probably throw an Exception or some MessageEvent
                    }
                }
            });

    requestQueue.add(request);

这对于像复杂对象一样的内容对我来说是有效的

 Map<String,<List<Map<String,Object>>>

最内部的对象是字符串和整数,列表被初始化为一个新的ArrayList。

希望这能帮到你!


你能帮忙吗?https://dev59.com/uVYO5IYBdhLWcg3wEddO - chris
@chris 仍然相关吗? - TommySM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接