Volley的使用(二)

在之前的文章里我简单介绍了有关于StringRequest和JsonRequest两种请求,并且总结出了它们的用法都是非常类似的,基本就是进行以下三步操作即可:

  1. 创建一个RequestQueue对象。

  2. 创建一个Request对象。

  3. 将Request对象添加到RequestQueue里面。

    其中,StringRequest和JsonRequest都是继承自Request的,所以它们的用法才会如此类似.
    那么既然Volley是开源的框架,我们是不是可以自己写一个属于自己的Request呢?
    答案是肯定的,我们十分的想将Volley请求下来的数据进行解析直接使用,所以呢,我们就来直接制定一个属于自己的Request,接下来我就带着大家一起畅游随心所欲的代码世界.

这里写代码片定义一个GsonRequest继承自Request,代码如下所示:

/**
 *  @硕哥告诉你
 *  16/5/11上午10:01
 *  首先你要为你的Request添加泛型然后继承Request<T>
 *
 */

public class GsonResquest<T> extends Request<T> {
    private Response.Listener<T> mListener; //用于回调的接口对象
    private Gson mGson; //一会儿用来解析的Gson
    private Class<T> mClass;//这就是我的带泛型的实体类


    //构造方法
    public GsonResquest(int method, String url, Response.ErrorListener listener, Response.Listener<T> mListener,  Class<T> mClass) {
        super(method, url, listener);
        this.mListener = mListener;
        this.mGson = new Gson();
        this.mClass = mClass;
    }

    //因为上面的构造方法中第一个参数就是我的请求类型,都是Get类型,所以我在写一个构造方法简化一下代码

    public GsonResquest(String url, Response.ErrorListener listener,Response.Listener mListener,Class mClass){
        this(Method.GET,url,listener,mListener,mClass);

    }


    //复写的方法 这个方法里我们添加的是网络请求,并且将我们想得到的数据进行解析.
    @Override
    protected Response<T> parseNetworkResponse(NetworkResponse response) {

        try {
            //首先要获取我们想要解析的数据
            String data = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
           //这里我们返回的就是成功时候的回调.直接将数据解析,注意一下第二个参数是缓存入口,这里我们直接设置的就是HttpHeaderParser.parseCacheHeaders(response)
            return Response.success(mGson.fromJson(data,mClass),HttpHeaderParser.parseCacheHeaders(response));
        } catch (UnsupportedEncodingException e) {
            //若出现异常,返回失败时候的回调
            return Response.error(new ParseError(e));
        }

    }
    //这个方法是对请求的response进行的反馈.
    @Override
    protected void deliverResponse(T response) {
        mListener.onResponse(response);
    }
}

这里我们已经GsonRequest写好了,接下来我们就使用一下这个自定义的请求方式吧

实现很简单
不要先创建请求队列呦 这里我就补贴代码了

GsonResquest<Bean> gsonResquest = new GsonResquest<>("http://api.liwushuo.com/v2/channels/103/items?limit=20&ad=2&gender=2&offset=0&generation=1" ,
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {

                    }
                }, new Response.Listener<Bean>() {
            @Override
            public void onResponse(Bean response) {
                Log.d("MainActivity" , "response.getData():" + response.getData());
            }
        },Bean.class);
        requestQueue.add(gsonResquest);

好的这样我们就可以直接使用请求下来的数据了 哈哈哈.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值