volley使用 POST请求

来源:互联网 发布:不二咲千寻 知乎 编辑:程序博客网 时间:2024/05/30 22:52
在拜读网站各种关于volley的使用方法之后,我也开始自行测试其可行性。现将过程中遇到的问题一一展示,以防忘记,也希望对人有益
要使用volley请求数据,首先要创建一个requestQuene对象。
requestQuene是一个请求队列对象,该队列可以缓存所有的http请求,并且按照一些算法自动的发出这些请求。requestQuene的设计本来就是预防了高并发的,所以我们无需每个activity里面都创建一个请求队列。我个人是创建了一个MyApplication继承Application。在这里面创建队列,并给了一个静态的方法,返回值是队列对象。方便在其他界面直接获取。
public class myApplication extends Application {    public static RequestQueue quene;    @Override    public void onCreate() {        super.onCreate();        quene= Volley.newRequestQueue(getApplicationContext());    }    public static RequestQueue getQuene(){        return quene;    }}
一:StringRequest——GET
1.新建一个StringRequest对象,并发起请求,在这里我使用的是百度api的免费接口

2.把该请求添加到请求队列中

Header参数重写getHeaders方法,对应 connection.setRequestProperty("apikey",  "您自己的apikey");

String server = "http://apis.baidu.com/txapi/weixin/wxhot";int num = 10;String url = String.format("%s?num=%s", server, num);Map<String, String> headerMap = new HashMap<String, String>();headerMap.put("apikey", "bc4dc2c212be5c32ec45539ecc2a0280");
<pre name="code" class="html"> StringRequest stringRequest=new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {            @Override            public void onResponse(String s) {                Log.i(TAG,s);            }        }, new Response.ErrorListener() {            @Override            public void onErrorResponse(VolleyError volleyError) {Log.i(TAG,s);            }}){            @Override            public Map<String, String> getHeaders() throws AuthFailureError {                Map<String, String> headerMap = new HashMap<String, String>();        headerMap.put("apikey", "bc4dc2c212be5c32ec45539ecc2a0280");return headerMap;            }        };
<pre name="code" class="html">myApplication.getQuene().add(stringRequest);

二:StringRequest——POST

1.新建StringRequest请求

2.把请求添加到请求队列中

post请求与get请求稍有不同,在参数传递方面需要注意。不过volley也已经提供了getParams方法用于解决。本例中使用易源接口做测试,在百度api中尚未找到post请求(涉及到加密的一些东西,在源码中有展示)

private void Volley_StringRequest_post() {        String url = "http://route.showapi.com/64-20";        String showapi_sign = "90b2a0426cc040258907aaf7aaba3e2f";        Map<String, String> map = new HashMap<String, String>();        map.put("showapi_appid", "11032");        map.put("showapi_timestamp", "" + System.currentTimeMillis());        map.put("showapi_sign_method", "md5");        String sign = CommUtil.createSign(map, showapi_sign);        map.put("showapi_sign", sign);        <pre name="code" class="html">        StringRequest stringRequest=new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {            @Override            public void onResponse(String s) {                Log.i(TAG,s);            }        }, new Response.ErrorListener() {            @Override            public void onErrorResponse(VolleyError volleyError) {                Log.i(TAG,volleyError.toString);            }        }){            @Override            protected Map<String, String> getParams() throws AuthFailureError {                return map;            }        };        myApplication.getQuene().add(stringRequest);

}

三:JsonObjectRequest——GET

这个基本上和上面的方法类似,不细说,直接上代码

String server = "http://apis.baidu.com/txapi/weixin/wxhot";int num = 10;String url = String.format("%s?num=%s", server, num);Map<String, String> map = new HashMap<String, String>();map.put("apikey", "bc4dc2c212be5c32ec45539ecc2a0280");
<pre name="code" class="html">JsonObjectRequest jsonObjectRequest=new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {            @Override            public void onResponse(JSONObject jsonObject) {                Log.i(TAG,jsonObject.toString);            }        }, new Response.ErrorListener() {            @Override            public void onErrorResponse(VolleyError volleyError) {                Log.i(TAG,volleyError.toString);            }        }){            @Override            public Map<String, String> getHeaders() throws AuthFailureError {                if (map==null){                    return null;                }else{                    return map;                }            }        };        myApplication.getQuene().add(jsonObjectRequest);

四:JsonObjectRequest——POST

jsonObjectRequest的post方法,坑比较多,碰巧该进的我都进了,在网上也找了各种解决方案,终于功夫不负有心人,找到一篇,同样将链接安利给各位

点击打开链接我的代码中也是使用作者的方法,我就不再这里粘贴了


我对方法进行了抽解,可以在activity中直接调用抽解方法进行操作,下载地址如下






0 0
原创粉丝点击