使用以下代码的时候,getParams()传递post请求,根本没有用,只能在构造方法里面传递JsonObject。在servlet中只能使用request.getInputStream()来获取输入流。因为没有设置对象的键值对,所以getParameter()也是没有办法获取的。
JsonRequest<JSONObject> jsonRequest = new JsonObjectRequest(Request.Method.POST,"http://222.20.9.33:8080/NoteServer/note/test.jsp", jsonObject,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d(TAG, "response -> " + response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, error.getMessage(), error);
}
})
{
//注意此处override的getParams()方法,在此处设置post需要提交的参数根本不起作用
//必须象上面那样,构成JSONObject当做实参传入JsonObjectRequest对象里
//所以这个方法在此处是不需要的
// @Override
// protected Map getParams() {
// Map map = new HashMap();
// map.put("name1", "value1");
// map.put("name2", "value2");
// return params;
// }
@Override
public Map<String, String> getHeaders() {
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("Accept", "application/json");
headers.put("Content-Type", "application/json; charset=UTF-8");
return headers;
}
};
如果要传递一个对象的list,那该如何实现。最简单的方法就是将list转换为Json格式的字符串,以StringRequest的方式提交给servlet。这时候还要讲post请求的头部信息,做一下修改,不然也是传递不过去的。
“Content-Type”, “application/x-www-form-urlencoded”
RequestQueue mQueue = Volley.newRequestQueue(this);
StringRequest stringRequest = new StringRequest(Request.Method.POST, "http://222.20.9.33:8080/NoteServer/note/test.jsp",
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("TAG", response.toString().trim());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("TAG", error.getMessage(), error);
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> map = new HashMap<String, String>();
map.put("params1", result);
return map;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
//设置头信息,不设置的话传递的信息都是null
Map<String, String> map = new HashMap<String, String>();
map.put("Content-Type", "application/x-www-form-urlencoded");
return map;
}
};
Person person = new Person("xxxx", "24");
ArrayList listP = new ArrayList();
listP.add(person);
listP.add(person);
System.out.println(person.getName());
Gson json = new Gson();
Type type = new TypeToken>() {
}.getType();
result = json.toJson(listP, type);
使用Gson来转换对象列表,然后将json字符串传递给后台。
在servlet中获取传递的参数值
System.out.println(request.getParameter("params1"));
这样一个对象列表就可以传递到servlet,然后再进行json数据的解析。
安卓中使用了Gson库,安卓中自带的json将对象转化为json的方法比较麻烦,这个就比较好用些。
注意:在使用的时候,之前没有将post请求头部信息,重写所以上传之后,获取的数据一直都是null
参考:http://well-lf.iteye.com/blog/1543807
http://blog.csdn.net/onlysnail/article/details/47905375
http://www.open-open.com/lib/view/open1407727047207.html