Volley+Okhttp使用心得
阿新 • • 發佈:2019-01-09
介紹
- 首先是用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最常用,所以其它的可以通過搜尋引擎輕易搜到。