Retrofit 2.0使用詳解,配合OkHttp、Gson,Android最強網路請求框架
1.使用retrofit,需要下載一些jar包
2.介紹這些jar包的作用
- 在1.x版本的retrofit框架:
只需要Retrofit包和gson-2.4.jar包就行了,那時的Retrofit預設是使用okhttp jar包來網路請求的,沒有的話就使用自己所帶的網路請求,解析預設是gson解析的,所以我們需要新增gson包。但是如果你要使用okhttp來請求的話,必須要新增okhttp-2.5.0.jar、okio-1.6.0.jar、okhttp-urlconnection-2.5.0.jar這三個包。
(1) okhttp-2.5.0.jar:okhttp主要的網路請求程式碼都在裡面
(2) okio-1.6.0.jar:okhttp 所需要的依賴包
(3) okhttp-urlconnection-2.5.0.jar:連線okhttp和retrofit的橋樑,但是在retrofit2.0後,可以不新增這個包,也可以使用okhttp請求了。
- 在2.0版本的retrofit框架:
我現在所用的是retrofit-2.0.0-beta2.jar ,目前的最新版本。發現retrofit改變的挺大。
(1)retrofit必須使用okhttp請求了,如果專案中沒有okhttp的依賴的話,肯定會出錯
(2)請求返回的解析不是預設的Gson解析了,需要我們手動去指定。
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://apis.baidu.com/showapi_open_bus/showapi_joke/")
.addConverterFactory (GsonConverterFactory.create())
.build();
這個就是Gson解析了,GsonConverterFactory是需要下載的jar。這是官方原話:
加上converter-gson-2.0.0-beta2_.jar包之後,還是需要gson-2.4.jar這個包的,沒有的話還是解析不了的
(3)okhttp-urlconnection-2.5.0.jar,我發現在retrofit2.0之後不加也是可以的,但是奇怪的是square公司還是一直在更新這個jar(最新是2015.09)。httpmime-4.5.jar是Apache公司的,用來加快網路請求效率的,搜了網上的一些文章,說這2個jar是用來讓網路更快的,我水平有限,深入不了retrofit和okhttp的原始碼理解,各位加上還是不加都是可以請求的,隨意啦~
3.Retrofit的請求
還是和以前一樣,通過介面的對映來請求,但是更改了一些請求方式。
以前是:
RestAdapter retrofit = new RestAdapter.Builder()
.setEndpoint(請求地址)
.setLogLevel(LogLevel.FULL)
// .setConverter(new GsonConverter(new Gson()))
// .setClient(new OkClient(new OkHttpClient()))
// .setErrorHandler(new RetrofitErrorHandler())
// .setRequestInterceptor(requestInterceptor)
.build();
GitHubService service = retrofit.create(GitHubService.class);
返回實體 result = service.請求的介面名稱(請求引數);
現在是:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(請求地址)
.addConverterFactory(GsonConverterFactory.create())
.build();
GitHubService service = retrofit.create(GitHubService.class);
retrofit.Call<返回實體> repos = service.請求的介面名稱(請求引數);
repos.enqueue(new retrofit.Callback<返回實體>() {
@Override
public void onResponse(retrofit.Response<返回實體> response, Retrofit retrofit) {
返回實體 body = response.body();
LogUtil.i(TAG, body.toString());
}
@Override
public void onFailure(Throwable throwable) {
// TODO Auto-generated method stub
}
});
4.刪除一些類
(1)RequestInterceptor類
2.0中retrofit的請求攔截類被刪除了,現在直接用的okhttp的請求攔截類
OkHttpClient client = new OkHttpClient();
client.interceptors().add(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Response response = chain.proceed(chain.request());
// Do anything with response here
return response;
}
});
// 然後傳遞建立的client到Retrofit的Builder鏈中。
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(請求地址)
.addConverterFactory(GsonConverterFactory.create())
.client(client)
.build();
(2)刪除ErrorHandler介面和RetrofitError類
沒有錯誤的提示了,同意集中在 callback的onFailure(Throwable throwable)的異常錯誤中了。
5.同步請求和非同步請求方式改變
以前是:
//在介面對映中
public interface GitHubService{
//同步請求
@POST("joke_text")
返回實體 請求介面名稱(請求引數);
//非同步請求
@POST("joke_text")
void 請求介面名稱(Callback<返回實體> cb);
}
2.0現在是:
// 同步請求
Call<返回實體> call = service.請求介面名稱();
返回實體 repo = call.execute();
// 非同步請求
Call<返回實體> call = service.請求介面名稱();
call.enqueue(new Callback<返回實體>() {
@Override
public void onResponse(Response<返回實體> response, Retrofit retrofit) {
// Get result bean from response.body()
}
@Override
public void onFailure(Throwable t) {
}
});
6.Url的重新定義
7.總結
搞了這麼多,終於可以使用retrofit+okhttp+gson超級網路請求框架了,網上說目前這個是最快的網路請求,比google的volley還快點,至於真假,就不知道了,但是不可否認,確實挺好用的,效率也是槓槓的。
就單獨的來說,OkHttp的網路請求也是很好用的,推薦文章鴻神的http://blog.csdn.net/lmj623565791/article/details/47911083
可惜單獨的Retrofit不能網路請求了,感覺這是2.0最不爽的地方了。當然組合使用應該是更爽的吧。