使用Volley提交Json数据post

使用以下代码的时候,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

你可能感兴趣的:(android)