Android Volley框架的几种post提交请求方式[转]



1.客户端以普通的post方式进行提交,服务端返回字符串

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
 
StringRequest stringRequest = new StringRequest(Request.Method.POST,httpurl,
     new Response.Listener<string>() {
         @Override
         public void onResponse(String response) {
             Log.d(TAG, "response -> " + response);
         }
     }, new Response.ErrorListener() {
         @Override
         public void onErrorResponse(VolleyError error) {
             Log.e(TAG, error.getMessage(), error);
         }
     }) {
     @Override
     protected Map<string, string= "" > getParams() {
         //在这里设置需要post的参数
               Map<string, string= "" > map = new HashMap<string, string= "" >(); 
             map.put( "name1" , "value1" ); 
             map.put( "name2" , "value2" ); 
 
           return params;
     }
};       
 
requestQueue.add(stringRequest);</string,></string,></string,></string>
2.客户端以json串的post请求方式进行提交,服务端返回json串

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
 
Map<string, string= "" > map = new HashMap<string, string= "" >(); 
map.put( "name1" , "value1" ); 
map.put( "name2" , "value2" ); 
 
JSONObject jsonObject = new JSONObject(params);
JsonRequest<jsonobject> jsonRequest = new JsonObjectRequest(Method.POST,httpurl, 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<string, string=""> getParams() {               
//          Map<string, string=""> map = new HashMap<string, string="">(); 
//            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;
     }
};
requestQueue.add(jsonRequest);</string,></string,></string,></string,></string,></string,></jsonobject></jsonobject></string,></string,>
看了上面这段代码,会觉得volley这个框架实在是还不够完善,使用JsonObjectRequest对象提交一个post请求,如果有参数需要提交,就必须以JSONObject的json串方式提交.
如果服务端并不支持这种方式呢?比如常见的spring m vc 服务端,就很难支持json的请求方式.
那么我们想实现这个目标,就需要使用下面给出的办法.

3.客户端以普通的post方式进行提交,服务端返回json串
首先在Activity类里,继承Request实现一个NormalPostRequest类
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
private class NormalPostRequest extends Request<jsonobject> {
     private Map<string, string= "" > mMap;
     private Listener<jsonobject> mListener;
 
     public NormalPostRequest(String url, Listener<jsonobject> listener,ErrorListener errorListener, Map<string, string= "" > map) {
         super (Request.Method.POST, url, errorListener);
             
         mListener = listener;
         mMap = map;
     }
     
     //mMap是已经按照前面的方式,设置了参数的实例
     @Override
     protected Map<string, string= "" > getParams() throws AuthFailureError {
         return mMap;
     }
     
     //此处因为response返回值需要json数据,和JsonObjectRequest类一样即可
     @Override
     protected Response<jsonobject> parseNetworkResponse(NetworkResponse response) {
         try {
             String jsonString = new String(response.data,HttpHeaderParser.parseCharset(response.headers));
                 
             return Response.success( new JSONObject(jsonString),HttpHeaderParser.parseCacheHeaders(response));
         } catch (UnsupportedEncodingException e) {
             return Response.error( new ParseError(e));
         } catch (JSONException je) {
             return Response.error( new ParseError(je));
         }
     }
 
     @Override
     protected void deliverResponse(JSONObject response) {
         mListener.onResponse(response);
     }
}</jsonobject></string,></string,></jsonobject></jsonobject></string,></jsonobject>
接下来的调用方式和前面差不多,生成一个Request实例,加入队列中即可.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
 
Request<jsonobject> request = new NormalPostRequest(httpurl,
     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);
         }
     }, params);
 
requestQueue.add(request);</jsonobject></jsonobject>
以上代码在android 4.3环境下测试通过.

1.客户端以普通的post方式进行提交,服务端返回字符串

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
 
StringRequest stringRequest = new StringRequest(Request.Method.POST,httpurl,
     new Response.Listener<string>() {
         @Override
         public void onResponse(String response) {
             Log.d(TAG, "response -> " + response);
         }
     }, new Response.ErrorListener() {
         @Override
         public void onErrorResponse(VolleyError error) {
             Log.e(TAG, error.getMessage(), error);
         }
     }) {
     @Override
     protected Map<string, string= "" > getParams() {
         //在这里设置需要post的参数
               Map<string, string= "" > map = new HashMap<string, string= "" >(); 
             map.put( "name1" , "value1" ); 
             map.put( "name2" , "value2" ); 
 
           return params;
     }
};       
 
requestQueue.add(stringRequest);</string,></string,></string,></string>
2.客户端以json串的post请求方式进行提交,服务端返回json串

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
 
Map<string, string= "" > map = new HashMap<string, string= "" >(); 
map.put( "name1" , "value1" ); 
map.put( "name2" , "value2" ); 
 
JSONObject jsonObject = new JSONObject(params);
JsonRequest<jsonobject> jsonRequest = new JsonObjectRequest(Method.POST,httpurl, 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<string, string=""> getParams() {               
//          Map<string, string=""> map = new HashMap<string, string="">(); 
//            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;
     }
};
requestQueue.add(jsonRequest);</string,></string,></string,></string,></string,></string,></jsonobject></jsonobject></string,></string,>
看了上面这段代码,会觉得volley这个框架实在是还不够完善,使用JsonObjectRequest对象提交一个post请求,如果有参数需要提交,就必须以JSONObject的json串方式提交.
如果服务端并不支持这种方式呢?比如常见的spring m vc 服务端,就很难支持json的请求方式.
那么我们想实现这个目标,就需要使用下面给出的办法.

3.客户端以普通的post方式进行提交,服务端返回json串
首先在Activity类里,继承Request实现一个NormalPostRequest类
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
private class NormalPostRequest extends Request<jsonobject> {
     private Map<string, string= "" > mMap;
     private Listener<jsonobject> mListener;
 
     public NormalPostRequest(String url, Listener<jsonobject> listener,ErrorListener errorListener, Map<string, string= "" > map) {
         super (Request.Method.POST, url, errorListener);
             
         mListener = listener;
         mMap = map;
     }
     
     //mMap是已经按照前面的方式,设置了参数的实例
     @Override
     protected Map<string, string= "" > getParams() throws AuthFailureError {
         return mMap;
     }
     
     //此处因为response返回值需要json数据,和JsonObjectRequest类一样即可
     @Override
     protected Response<jsonobject> parseNetworkResponse(NetworkResponse response) {
         try {
             String jsonString = new String(response.data,HttpHeaderParser.parseCharset(response.headers));
                 
             return Response.success( new JSONObject(jsonString),HttpHeaderParser.parseCacheHeaders(response));
         } catch (UnsupportedEncodingException e) {
             return Response.error( new ParseError(e));
         } catch (JSONException je) {
             return Response.error( new ParseError(je));
         }
     }
 
     @Override
     protected void deliverResponse(JSONObject response) {
         mListener.onResponse(response);
     }
}</jsonobject></string,></string,></jsonobject></jsonobject></string,></jsonobject>
接下来的调用方式和前面差不多,生成一个Request实例,加入队列中即可.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
 
Request<jsonobject> request = new NormalPostRequest(httpurl,
     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);
         }
     }, params);
 
requestQueue.add(request);</jsonobject></jsonobject>
以上代码在android 4.3环境下测试通过.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值