Volley+Okhttp使用心得

来源:互联网 发布:sci-hub 知乎 编辑:程序博客网 时间:2024/05/16 07:31

介绍

  • 首先是用Retrofit2.0文档太少了,文档根本没有跟上,加上Kotlin的缘故,让我放弃了。
  • 之所以选择Retrofit主要是看中他可以使用Okhttp使用网络层,Okhttp是一款高效的网络请求框架
  • 搜索了一下发现Volley也可以使用Okhttp来作为传输层,遂用之

准备

  首先需要引入依赖

    compile 'com.mcxiaoke.volley:library:1.0.19'      compile 'com.squareup.okhttp:okhttp:2.5.0'      compile 'com.squareup.okhttp:okhttp-urlconnection:  2.5.0'

  接着需要一个类来继承重写HurlStack

    import com.android.volley.toolbox.HurlStack;    import com.squareup.okhttp.OkHttpClient;    import com.squareup.okhttp.OkUrlFactory;    import java.io.IOException;    import java.net.HttpURLConnection;    import java.net.URL;    /**    * Created by apple on 15/11/12.    */    public class OkHttpStack extends HurlStack {        private final OkUrlFactory okUrlFactory;    public OkHttpStack() {     this(new OkUrlFactory(new OkHttpClient()));    }    public OkHttpStack(OkUrlFactory okUrlFactory) {     if (okUrlFactory == null) {          throw new NullPointerException("Client must not be null.");        }        this.okUrlFactory = okUrlFactory;    }    @Override    protected HttpURLConnection createConnection(URL url) throws IOException {       return okUrlFactory.open(url);     }    }

  重写这个主要为了替换原本的Http加载方式,由于Okhttp升级到了2.0原本网上的client.open()方法并不起作用,所以得引入依赖:

compile 'com.squareup.okhttp:okhttp-urlconnection:  2.5.0'

  接着需要在queue初始化的时候调用OkHttpStack:

volley = Volley.newRequestQueue(this, new OkHttpStack());

  这样就完成了,之后调用这个volley对象即可。

使用Volley

这里只记录常用的StringRequest的使用方法,因为很多网络请求都是使用请求回来字符串,使用Gson转换为对象。

  新建一个StringRequest

StringRequest request=new StringRequest(Request.Method.GET, URL, new Response.Listener<String>() {        @Override        public void onResponse(String response) {            System.out.println(response);        }    },null);mVolley.add(request);

  StringRequest的参数说明。第一个参数是请求方法,第二个参数是请求的URL,第三个是请求成功的监听,第四个是请求失败的监听,由于偷懒我并没有写,直接使用了null。

遇到了带参数的post请求怎么办?
可以这样写:

StringRequest request = new StringRequest(Request.Method.GET, URL, new Response.Listener<String>() {        @Override        public void onResponse(String response) {            System.out.println(response);        }    }, null) {        @Override        protected Map<String, String> getParams() throws AuthFailureError {            Map<String, String> map = new HashMap<>();            map.put("key", "value");            map.put("key1", "value1");            return map;        }    };    mVolley.add(request);

Volley还有很多请求方式,不过由于StingRequest最常用,所以其它的可以通过搜索引擎轻易搜到。

0 0
原创粉丝点击