Volley的使用(一)

一.概述

Volley是谷歌推荐的一个网络请求框架,它的设计目标就是非常适合去进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如说下载文件等,Volley的表现就会非常糟糕。今天来对Volley进行一个简单的封装,使用起来方便一点。

二.封装

1.VolleyUtil

public class VolleyUtil {
    private static RequestQueue mRequestQueue;

    /**
     * 初始化请求队列,单例保证只有一个请求队列
     * @param context
     */
    public static void initialize(Context context){
        if(mRequestQueue == null){
            synchronized (VolleyUtil.class){
                if(mRequestQueue == null){
                    mRequestQueue = Volley.newRequestQueue(context);
                }
            }
        }
    }

    /**
     * 获取请求队列
     * @return
     */
    public static RequestQueue getRequestQueue(){
        if(mRequestQueue == null){
            throw new RuntimeException("请先初始化RequestQueue");
        }
        return mRequestQueue;
    }
}

2.GsonRequest(解析json数据)GET方式

public class GsonRequest<T> extends Request<T> {
    private ResponseListener mListener;
    private Gson mGson;
    private Type mClazz;
    public GsonRequest(String url, Type type , ResponseListener listener) {
        super(Method.GET, url, listener);
        mGson = new Gson();
        mClazz = type;
        mListener = listener;
    }
    @Override
    protected Response<T> parseNetworkResponse(NetworkResponse response) {
        try {
            T result;
            String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
            result = mGson.fromJson(jsonString,mClazz);
            return Response.success(result,HttpHeaderParser.parseCacheHeaders(response));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return Response.error(new ParseError());
    }
    @Override
    protected void deliverResponse(T response) {
        mListener.onResponse(response);
    }
}

3.ResponseListener

//响应接口
public interface ResponseListener extends Response.Listener,Response.ErrorListener {
}

4.TestApi

public class TestApi {
    public static void getObjectApi(String url, ResponseListener listener){
           //创建请求
        Request request =  new GsonRequest(url,new TypeToken<MovieInfo>(){}.getType(),listener);
        //将请求添加到请求队列
        VolleyUtil.getRequestQueue().add(request);
    }
}

上面封装的是GET请求,下面我们看看如何封装一个POST请求,相同的部分就不说了,下面给出改动的地方,

我们先给出接口地址

 public static final String POST_POP_LIST =
            "http://api.themoviedb.org/3/discover/movie?sort_by=vote_average.desc&api_key=643e503c35816202926457ad7d535052";

然后是GsonRequest

public class GsonRequest<T> extends Request<T> {
    private ResponseListener mListener;
    private Gson mGson;
    private Type mClazz;
    private HashMap<String,String> mParams;//封装请求参数
    public  GsonRequest(String url, Type type ,HashMap<String,String> params, ResponseListener listener) {
        super(Method.POST, url, listener);
        mGson = new Gson();
        mClazz = type;
        mParams = params;
        mListener = listener;
    }
    @Override
    protected Response<T> parseNetworkResponse(NetworkResponse response) {
        try {
            T result;
            String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
            result = mGson.fromJson(jsonString,mClazz);
            return Response.success(result,HttpHeaderParser.parseCacheHeaders(response));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return Response.error(new ParseError());
    }
    @Override
    protected void deliverResponse(T response) {
        mListener.onResponse(response);
    }

    /**
     * 在 Volley 的网络操作中,如果判断请求方式为 Post 则会通过此方法来获取 param,所以在这里返回我们需要的参数
     * @return
     * @throws AuthFailureError
     */
    @Override
    protected Map<String, String> getParams() throws AuthFailureError {
        return mParams;
    }
}

最后是TestApi

public class TestApi {
    public static void getObjectApi(String url, ResponseListener listener){
        HashMap<String,String> params = new HashMap<>();
        //封装参数
        params.put("api_key", Constant.API_KEY);
        Request request =  new GsonRequest(url,new TypeToken<MovieInfo>(){}.getType(),params,listener);
        VolleyUtil.getRequestQueue().add(request);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值