Volley(二)

通过之前,我们已经了解了Volley的基本用法,VolleyRequest、JsonXXXXRequest、ImageRequest。

以上这些都是Volley给我们写好的用于字符串、json和图片的网络数据读取。而在面对自定义数据时,则需要我们自定义的 Request 的请求。因此,Volley给了我们一个抽象类 Request 类。让我们继承该类,重写内部方法来实现自定义的请求类,并添加至请求列队来进行网络请求。

在继承该类后需要添加自定义返回数据类型、重写两个方法。在此我们使用Object类作为返回对象,其中两个构造方法中添加了 mListener 对象,而第二个构造方法则前置写入为GET请求方式。重写的两个方法 parseNetworkResponse 和 deliveerResponse。

public class ObjectRequest extends Request<Object> {

    public Response.Listener<Object> mListener;

    public ObjectRequest(int method, String url, Response.Listener<Object> mListener, Response.ErrorListener listener) {
        super(method, url, listener);
        this.mListener = mListener;
    }

    // GET用请求构造函数
    public ObjectRequest(String url, Response.Listener<Object> mListener, Response.ErrorListener listener) {
        super(Method.GET, url, listener);
        this.mListener = mListener;
    }
    
    @Override
    protected Response<Object> parseNetworkResponse(NetworkResponse response) {
        return null;
    }

    @Override
    protected void deliverResponse(Object response) {
    }
}

parseNetworkResponse 是对服务器响应的数据进行解析,数据以字节的形式存放在NetWorkResponse对象的data数据中,我们通过对该数据进

独的打包封装成为自己想得到的 Object 对象,通过Response.onSuccess返回,

deliverResponse 是将服务器响应的数据进行回调。

    @Override
    protected Response<Object> parseNetworkResponse(NetworkResponse response) {
        try {
            String str = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
            return Response.success((Object) str, HttpHeaderParser.parseCacheHeaders(response));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            return  Response.error(new ParseError(e));
        }
    }

    @Override
    protected void deliverResponse(Object response) {
        mListener.onResponse(response);
    }


取消请求:在添加请求前给请求一个Tag标志,就可以在请求列队中记录到这个请求,如果我们想要取消这个标志Tag标志的请求,只需要通过请

队的 cancelAll 方法去取消Tag请求。


请求缓存:通过url查询请求列队中的cache查看是否存有该请求的缓存,大大减少请求次数。

	Cache cache = requestQueue.getCache();
        Cache.Entry entry = cache.get(url);
        if (entry != null)
            try {
                String data = new String(entry.data, "UTF-8");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }

无效缓存:这是官网中的解释:

7.2 Invalidate cache
Invalidate means we are invalidating the cached data instead of deleting it. Volley will still uses the cached object until the

newdata received from server. Once it receives the response from the server it will override the older cached response.

大致意思是,无效表示我们正在使缓存的数据无效,而不是删除它。 Volley仍将使用缓存的对象,直到从服务器接收到新数    据。一旦它从服务器收到响应,它将覆盖旧的缓存响应。这是我拿Instant Translate软件翻译的。

	cache.invalidate(url, true);


关闭缓存:setShouldCache(false);// 通过单独请求关闭

删除单独缓存:remove(url);// 通过队列删除

删除所有缓存:clear(url);// 通过队列删除


设置优先级:

在实际开发中,我们常常需要提高某些请求的优先级来使其优先执行。一共有四个等级,默认是第二个。

                Priority.LOW
                Priority.NORMAL
                Priority.HIGH
                Priority.IMMEDIATE
具体设置请求优先级可以重写请求对象重的 getPriority 方法,返回自己需要定义的优先级。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值