淺談RxJava+Retrofit+OkHttp 封裝使用
背景
之前學習完Retrofit+Rxjava之后寫了一篇關于封裝的博客,發(fā)出后受到大家的關注以及使用,由于不斷的完善之前的項目,所以決定把最新的項目封裝過程講解出來,供大家查看!
Retrofit介紹:
Retrofit和okHttp師出同門,也是Square的開源庫,它是一個類型安全的網絡請求庫,Retrofit簡化了網絡請求流程,基于OkHtttp做了封裝,解耦的更徹底:比方說通過注解來配置請求參數,通過工廠來生成CallAdapter,Converter,你可以使用不同的請求適配器(CallAdapter), 比方說RxJava,Java8, Guava。你可以使用不同的反序列化工具(Converter),比方說json, protobuff, xml, moshi等等。
官網 http://square.github.io/retrofit/
github https://github.com/square/retrofit
效果
懶人簡單的使用方式
為什么稱為懶人,因為你什么都不用做,直接按照一般案例寫rx和retrofit的使用
引入需要的包
/*rx-android-java*/ compile 'io.reactivex:rxjava:+' compile 'com.squareup.retrofit:adapter-rxjava:+' compile 'com.trello:rxlifecycle:+' compile 'com.trello:rxlifecycle-components:+' /*rotrofit*/ compile 'com.squareup.retrofit2:retrofit:+' compile 'com.squareup.retrofit2:converter-gson:+' compile 'com.squareup.retrofit2:adapter-rxjava:+' compile 'com.google.code.gson:gson:+'
創(chuàng)建一個service定義請求的接口
/** * service統一接口數據 * Created by WZG on 2016/7/16. */ public interface HttpService { @POST("AppFiftyToneGraph/videoLink") Observable<RetrofitEntity> getAllVedioBy(@Body boolean once_no); }
創(chuàng)建一個retrofit對象
//手動創(chuàng)建一個OkHttpClient并設置超時時間 okhttp3.OkHttpClient.Builder builder = new OkHttpClient.Builder(); builder.connectTimeout(5, TimeUnit.SECONDS); Retrofit retrofit = new Retrofit.Builder() .client(builder.build()) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .baseUrl(HttpManager.BASE_URL) .build();
http請求處理
// 加載框 final ProgressDialog pd = new ProgressDialog(this); HttpService apiService = retrofit.create(HttpService.class); Observable<RetrofitEntity> observable = apiService.getAllVedioBy(true); observable.subscribeOn(Schedulers.io()).unsubscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) .subscribe( new Subscriber<RetrofitEntity>() { @Override public void onCompleted() { if (pd != null && pd.isShowing()) { pd.dismiss(); } } @Override public void onError(Throwable e) { if (pd != null && pd.isShowing()) { pd.dismiss(); } } @Override public void onNext(RetrofitEntity retrofitEntity) { tvMsg.setText("無封裝:\n" + retrofitEntity.getData().toString()); } @Override public void onStart() { super.onStart(); pd.show(); } } );
源碼:傳送門-源碼地址
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Android studio button 按鈕 四種綁定事件的方法【實例代碼】
這篇文章主要介紹了Android studio button 按鈕 四種綁定事件的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-08-08Android中關于CoordinatorLayout的一些實用布局技巧
大家都知道CoordinatorLayout是一個“加強版”的 FrameLayout,那么下面這篇文章主要給大家分享了Android中關于CoordinatorLayout的一些布局技巧,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。2017-06-06android使用FlipAnimation實現3D垂直翻轉動畫
這篇文章主要為大家詳細介紹了android使用FlipAnimation實現3D垂直翻轉動畫,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12Android組件創(chuàng)建DrawerLayout導航
這篇文章主要為大家詳細介紹了Android組件創(chuàng)建DrawerLayout導航的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-01-01Android Studio利用AChartEngine制作餅圖的方法
閑來無事,發(fā)現市面上好多app都有餅圖統計的功能,得空自己實現一下,下面這篇文章主要給大家介紹了關于Android Studio利用AChartEngine制作餅圖的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧2018-10-10