码迷,mamicode.com
首页 > 其他好文 > 详细

Volley实现原理简述

时间:2016-08-10 16:14:17      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:

 

                           Volley实现原理简述

一、介绍

VolleyGoole退出的Android异步网络请求框架和图片加载框架。

主要特点:

1)扩展性强。Volley大多是基于接口的设计。

2)符合Http规范。

3Android2.3及以上版本默认基于HttpUrlConnection,2.3以下基于HttpClient

4)提供简便的图片加载工具。

二、使用

1、调用:通过newRequestQueue()函数新建并启动一个请求队列,向RequestQueuezhon

不断add Request

代码示例

public class MyApplication extends Application {

public static RequestQueue mQueue;

@Override

public void onCreate() {

super.onCreate();

mQueue = Volley.newRequestQueue(getApplicationContext());

}

public static RequestQueue getVolleyQueue() {

return mQueue;

}

}

 

2、使用示例:

StringRequest request = new StringRequest(Method.GET, tabUrl,

new Listener<String>() {

 

@Override

public void onResponse(String arg0) {

Gson gson = new Gson();

tEntity = gson.fromJson(arg0, TabEntity.class);

list = tEntity.getResult();

adapter = new PlayAdapter(tEntity, PlayerActivity.this);

lvPlay.setAdapter(adapter);

 

}

}, new Response.ErrorListener() {

 

@Override

public void onErrorResponse(VolleyError arg0) {

}

});

 

request.setTag("abc");// 通过标签取消请求

MyApplication.getVolleyQueue().add(request);// 请求添加到请求队列中

3post请求工具类

public 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);

}

 

}

四、优缺点:

优点:

1)自动调度网络请求。

2)用于多个并发的网络连接。

3)通过使用标准的Http缓存机制保持磁盘和内存响应的一致。

4)支持请求优先级。

5)支持取消请求的强大API,可以取消单个请求或多个。

6)易于定制。

7)健壮性:便于正确的更新UI和获取数据

8)包含调试和追踪工具。

缺点:

1)在BasicNetWork中判断了statusCode(statusCode < 200 || statusCode > 299),如何符合条件直接抛出IOException(),不够合理。

2)导致401等其它状态抛出IOException

3)图片加载性能一般。

 

Volley实现原理简述

标签:

原文地址:http://www.cnblogs.com/sangfan/p/5756997.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!