Rxjava2與Retrofit2的使用
首先在學習他們的結合使用前,我們需要簡單的學習它們:
Rxjava2的簡單使用與基本操作符
Retrofit2網路框架的使用
這裡我使用了Bmob作為簡單的後臺管理,通過登入案列以便檢視
一 配置
//rxjava2
compile 'io.reactivex.rxjava2:rxjava:2.1.10'
compile 'io.reactivex.rxjava2:rxandroid:2.0.2'
//retrofit2
compile 'com.squareup.retrofit2:retrofit:2.3.0'
//Retrofit到Gson進行轉換的庫
compile 'com.squareup.retrofit2:converter-gson:2.3.0'
//Retrofit到RxJava進行轉換的庫
compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
//如果需要新增HttpLoggingInterceptor進行除錯,新增如下依賴
compile 'com.squareup.okhttp3:logging-interceptor:3.6.0'
compile 'com.squareup.okhttp3:okhttp-urlconnection:3.2.0'
二 使用
2.1 建立介面
interface HttpInterface {
//登入
@GET("1/login")
Observable<User> login(@QueryMap Map<String, String> data);
}
2.2 建立Retrofit2工具類
public class RetrofitHttp {
public static HttpInterface getHttpInterface() {
//儲存cookie資訊
CookieManager cookieManager = new CookieManager();
cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
// Retrofit是基於OkHttpClient的,可以建立一個OkHttpClient進行一些配置
OkHttpClient httpClient = new OkHttpClient.Builder()
// 新增通用的Header
.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Request build = request.newBuilder()
//新增headler
.addHeader("X-Bmob-Application-Id", "88d31c7422f7bb24b4b162743c436fdc")
.addHeader("X-Bmob-REST-API-Key", "d06ffe71668b518ffec6839436d5ed16")
.method(request.method(), request.body())
.build();
return chain.proceed(build);
}
})
//新增HttpLoggingInterceptor攔截器方便除錯介面
.addInterceptor(new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
@Override
public void log(String message) {
}
}).setLevel(HttpLoggingInterceptor.Level.BASIC))
.connectTimeout(30, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.cookieJar(new JavaNetCookieJar(cookieManager))
.retryOnConnectionFailure(true)
.build();
return new Retrofit.Builder()
.baseUrl("https://api.bmob.cn/")
// 新增Gson轉換器
.addConverterFactory(GsonConverterFactory.create())
// 新增Retrofit到RxJava的轉換器
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(httpClient)
.build()
.create(HttpInterface.class);
}
}
2.3 封裝方便呼叫
public class ApiServer {
/**
* 使用者登入
*/
public static void loginModel(Map<String, String> data, Observer<User> observer) {
RetrofitHttp.getHttpInterface()
.login(data)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer);
}
}
2. 4 呼叫方法,訪問網路
Map<String,String>map=new ArrayMap<>();
map.put("username","admin");
map.put("password","admin");
ApiServer.loginModel(map, new Observer<User>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
}
@Override
public void onNext(@NonNull User user) {
Log.i(TAG, "onNext: "+user);
}
@Override
public void onError(@NonNull Throwable e) {
}
@Override
public void onComplete() {
}
});
相關文章
- RxJava2 + Retrofit2 完全指南 之 對返回Response的統一處理RxJava
- Android RxJava系列三: 與Retrofit2結合使用和封AndroidRxJava
- RxJava2 系列-3:使用 SubjectRxJava
- 史上最全的Rxjava2講解(使用篇)RxJava
- Retrofit2與服務端例項講解服務端
- Rxjava2(一)、基礎概念及使用RxJava
- 基於Retrofit2實現的LycheeHttpHTTP
- Retrofit2<三> rxJava 分析RxJava
- Retrofit2分析
- Retrofit2原始碼解析(一)原始碼
- 秒懂Retrofit2之GsonConverter
- 深入理解 RxJava2:論 Parallel 與併發(5)RxJavaParallel
- 基於Retrofit2實現的LycheeHttp-使用動態代理實現上傳HTTP
- RxJava2 系列-1:一篇的比較全面的 RxJava2 方法總結RxJava
- RxJava2 學習(一)RxJava
- RxJava2 學習(二)RxJava
- RxJava2原始碼分析RxJava原始碼
- 【原始碼SOLO】Retrofit2原始碼解析(一)原始碼
- RxJava2 中 doFinally 和 doAfterTerminRxJava
- Rxjava2解析-訂閱流程RxJava
- RxJava2 原始碼解析(一)RxJava原始碼
- Rxjava2最全面的解析RxJava
- 深入RxJava2 原始碼解析(一)RxJava原始碼
- 深入理解 RxJava2:Scheduler(2)RxJava
- 深入RxJava2 原始碼解析(二)RxJava原始碼
- RxJava2 操作符總結RxJava
- Android——RxJava2史上最全講解AndroidRxJava
- 詳解 RxJava2 的執行緒切換原理RxJava執行緒
- 基於Retrofit2實現的LycheeHttp-多工下載的實現HTTP
- RxJava2 錯誤處理詳解RxJava
- RxJava2系列之背壓策略(一)RxJava
- RxJava2 系列-2:背壓和FlowableRxJava
- 深入理解 RxJava2:前世今生(1)RxJava
- 【填坑往事】使用Rxjava2的distinct操作符處理自定義資料型別去重的問題RxJava資料型別
- RxJava2原始碼分析(一):基本流程分析RxJava原始碼
- RxJava2操作符學習筆記RxJava筆記
- RxJava2 原始碼解析及設計思想RxJava原始碼
- 深入理解 RxJava2:揭祕 subscribeOn(3)RxJava