在拜读网站各种关于volley的使用方法之后,我也开始自行测试其可行性。现将过程中遇到的问题一一展示,以防忘记,也希望对人有益
要使用volley请求数据,首先要创建一个requestQuene对象。
requestQuene是一个请求队列对象,该队列可以缓存所有的http请求,并且按照一些算法自动的发出这些请求。requestQuene的设计本来就是预防了高并发的,所以我们无需每个activity里面都创建一个请求队列。我个人是创建了一个MyApplication继承Application。在这里面创建队列,并给了一个静态的方法,返回值是队列对象。方便在其他界面直接获取。
1.新建一个StringRequest对象,并发起请求,在这里我使用的是百度api的免费接口
}
四:JsonObjectRequest——POST
要使用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中直接调用抽解方法进行操作,下载地址如下