将 ArrayList 放入参数 JsonObject
Put ArrayList into param JsonObject
我必须使用 Volley Framework 来请求。这是一个带有 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"]
}
你需要先创建一个 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();
}
};
尝试传递 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
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。
希望对您有所帮助!
我必须使用 Volley Framework 来请求。这是一个带有 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"]
}
你需要先创建一个 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();
}
};
尝试传递 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
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。
希望对您有所帮助!