Volley+Okhttp使用心得

介紹

  • 首先是用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最常用,所以其它的可以通過搜索引擎輕易搜到。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章