1.Volley主要特点
- 1.扩展性强:基于接口设计
- 2.一定程度上符合HTTP规范,返回包括ResponseCode的处理、请求头处理、缓存机制的处理
- 3.重试以及优先级的定义
- 4.2.3以上使用HttpURLConnection2.3以下使用HttpClient
- 5.提供简单的图片加载工具
2.Volley使用
1.导包
implementation'com.navercorp.volleyextensions:volley-requests:2.0.1'
2.创建RequestQueue
RequestQueue requestQueue = Volley.newRequestQueue(this.getApplicationContext());
可以自定义创建RequestQueue,控制返回结果是否在主线程
默认通过Volley创建的RequestQueue
public RequestQueue(Cache cache, Network network, int threadPoolSize) {
this(cache, network, threadPoolSize, new ExecutorDelivery(new Handler(Looper.getMainLooper())));
}
自定义创建(自定创建时可以使返回结果不在UI线程处理)
public RequestQueue(Cache cache, Network network, int threadPoolSize, ResponseDelivery delivery) {
mCache = cache;
mNetwork = network;
mDispatchers = new NetworkDispatcher[threadPoolSize];
mDelivery = delivery;
}
3.String请求
StringRequest request = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
//处理返回结果(默认创建的RequestQueue在主线程)
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//处理返回错误信息(默认创建的RequestQueue在主线程)
}
});
requestQueue.add(request);
4.JSONObject请求
JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, url, jsonRequest, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
//处理返回结果(默认创建的RequestQueue在主线程)
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//处理返回错误信息(默认创建的RequestQueue在主线程)
}
});
requestQueue.add(request);
5.自定义Request请求
定义类继承Request<T>,重写parseNetworkResponse函数可以结合JSON解析工具
@Override
protected Response<T> parseNetworkResponse(NetworkResponse response) {
//异步线程中处理返回数据解析
}
6.同步请求
RequestFuture<String> future = RequestFuture.newFuture();
StringRequest stringRequest = new StringRequest("",future,future);
requestQueue.add(stringRequest);
String response = future.get();//该方法为同步方法,其中使用wait等待结果返回被notify
//String response = future.get(1500, TimeUnit.MILLISECONDS);//设置超时时间
3.总结
Volley适合数据量小,通信频繁的网络操作。android绝大多数都属于这种类型,但是对于数据量比较大的操作,比如:下载,就不太适用了。