本文共 3309 字,大约阅读时间需要 11 分钟。
使用以下代码的时候,getParams()传递post请求,根本没有用,只能在构造方法里面传递JsonObject。在servlet中只能使用request.getInputStream()来获取输入流。因为没有设置对象的键值对,所以getParameter()也是没有办法获取的。
JsonRequestjsonRequest = new JsonObjectRequest(Request.Method.POST,"http://222.20.9.33:8080/NoteServer/note/test.jsp", jsonObject, new Response.Listener () { @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 getHeaders() { HashMap headers = new HashMap (); 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() { @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 getParams() throws AuthFailureError { Map map = new HashMap (); map.put("params1", result); return map; } @Override public Map getHeaders() throws AuthFailureError { //设置头信息,不设置的话传递的信息都是null Map map = new HashMap (); map.put("Content-Type", "application/x-www-form-urlencoded"); return map; } };
Person person = new Person("xxxx", "24"); ArrayListlistP = 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://wpnws.baihongyu.com/