将ArrayList放入param JsonObject中
我必须要求使用Volley Framework。 这是一个带有JSONObject的POST请求。
我必须传递一个字符串和一个JSONArray ..但我怎么能?
我从这开始:
private String mUrl; private ArrayList mUrlDove; HashMap params = new HashMap(); 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 getHeaders() throws AuthFailureError { return app.getInstance().createBasicAuthHeader(); } };
如果我尝试使用浏览器,我必须设置:
{ "url": "www.secret.com", "urlDove" : [ "www.google.com","www.yahoo.com"] }
你需要先制作一个JSON数组然后存储它
private String mUrl; private ArrayList mUrlDove; HashMap params = new HashMap(); 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 getHeaders() throws AuthFailureError { return app.getInstance().createBasicAuthHeader(); } };
尝试传递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 getHeaders() throws AuthFailureError { return app.getInstance().createBasicAuthHeader(); } };
在解析json时参考https://stackoverflow.com/a/17810270/4810752
JSONObject可以接受Java对象,尝试使用
Map
像这样的东西:
String mUrl; //initialized somewhere else ArrayList mUrlDove; //initialized somewhere else Map 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() { @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>>
最内部对象是字符串和整数,并且List被初始化为新的ArrayList。
希望这可以帮助!