RxAndroid的使用方式6-Retrofit2.0使用詳解

綜述

  retrofit是由square公司開發的。square在github上發佈了很多優秀的Android開源項目。例如:otto(事件總線),leakcanary(排查內存泄露),android-times-square(日曆控件),dagger(依賴注入),picasso(異步加載圖片),okhttp(網絡請求),retrofit(網絡請求)等等。更多square上的開源項目我們可以去square的GitHub進行查看。這次就來介紹一下retrofit的一些基本用法。retrofit是REST安卓客戶端請求庫。使用retrofit可以進行GET,POST,PUT,DELETE等請求方式。下面就來看一下retrofit的基本用法。

Retrofit使用方法

retrofit2.0它依賴於OkHttp,而且這部分也不再支持替換。在這裏我們也不需要顯示的導入okHttp,在retrofit中已經導入okhttp3。

{% highlight java %}
// Retrofit的rx解析庫
compile ‘com.squareup.retrofit2:retrofit:2.1.0’
compile ‘com.squareup.retrofit2:adapter-rxjava:2.1.0’
// Retrofit的gson庫
compile ‘com.squareup.retrofit2:converter-gson:2.1.0’
compile ‘com.squareup.retrofit2:converter-scalars:2.1.0’
//okhttp
compile ‘com.squareup.okhttp3:okhttp:3.4.1’
compile ‘com.squareup.okhttp3:logging-interceptor:3.4.1’
{% endhighlight %}

創建API接口

  在retrofit中通過一個Java接口作爲http請求的api接口。
{% highlight java %}
public interface GitHubService {
// @GET(“user/cover/android”)
@GET(“app/list/homepage”)
Observable getData();
}
{% endhighlight %}

使用方法
Retrofit能夠與RxJava進行完美結合。下面就來看一下Retrofit與RxJava是如何結合在一起的。對於RxJava在這就不在進行詳細介紹,對於RXJava的使用可以參考附錄裏面給出鏈接。 代碼如下:

{% highlight java %}
//攔截器,用於輸出網絡請求和結果的 Log
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
//如果你需要在遇到諸如 401 Not Authorised 的時候進行刷新 token
Authenticator mAuthenticator = (route, response) -> {
// Your.sToken = apiManager.refreshToken();
String token = “”;
return response.request().newBuilder()
.addHeader(“Authorization”, “Bearer” + ” ” + token)
.build();
};
//所有網絡請求都附上你的攔截器
Interceptor mTokenInterceptor = chain -> {
Request originalRequest = chain.request();
// if (Your.sToken == null || alreadyHasAuthorizationHeader(originalRequest)) {
// return chain.proceed(originalRequest);
// }
Request authorised = originalRequest.newBuilder()
.header(“Authorization”, “Bearer” + ” ” + “”)
.build();
return chain.proceed(authorised);
};
//初始化OkHttpClient
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(interceptor)
.retryOnConnectionFailure(true)
.connectTimeout(15, TimeUnit.SECONDS)
.addNetworkInterceptor(mTokenInterceptor)
.authenticator(mAuthenticator)
.build();
//初始化Retrofit
Retrofit sRetrofit = new Retrofit.Builder()
.baseUrl(ENDPOINT)
.client(client)
// .addConverterFactory(ScalarsConverterFactory.create())//字符
.addConverterFactory(GsonConverterFactory.create())//gson
.addCallAdapterFactory(RxJavaCallAdapterFactory.create()) // 使用RxJava作爲回調適配器
.build();
//數據初始化
GitHubService apiManager = sRetrofit.create(GitHubService.class);

    apiManager.getData().subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(weatherData -> {
                //結果顯示
                mTvText.setText(weatherData.toString());
            }, throwable -> {
                mTvText.setText(throwable.toString());
            });

{% endhighlight %}

發佈了27 篇原創文章 · 獲贊 5 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章