Retrofit + RxJava 的结合使用
2017-03-06 20:09
351 查看
Retrofit + RxJava火了好一阵子了,网上也有很多博客,下面对之前的学习经验做一些总结,权当记笔记了,若是能够帮到看到的人,那也是很高兴的。
对于Retrofit不熟悉,可以查看 Retrofit官网,也可以查看我写的 Retrofit学习笔记。
对于RxJava不熟悉,可以查看 扔物线 大神的 给 Android 开发者的 RxJava 详解
闲话少说,直接奔主题:
上述代码中HttpApi.class的代码如下,注意这里getData()返回的数据类型为Call:
3.2、Retrofit 与 RxJava 结合使用是这样的:
3.2.1、添加如下依赖(这里之前我已经添加过了):
3.2.2、代码如下(注意添加了创建builder对象时addCallAdapterFactory(RxJavaCallAdapterFactory.create())方法):
上述代码中HttpApi.class的代码如下,注意这里getData()返回的数据类型为Observable:
这样Retrofit和RxJava就结合在一起了,下面是我写的一个简单的封装:
上述代码中HttpApi.class的代码如下:
对于Retrofit不熟悉,可以查看 Retrofit官网,也可以查看我写的 Retrofit学习笔记。
对于RxJava不熟悉,可以查看 扔物线 大神的 给 Android 开发者的 RxJava 详解
闲话少说,直接奔主题:
1、在builde.gradle(Moudle:app)中添加如下依赖
compile 'io.reactivex:rxjava:1.1.0' compile 'io.reactivex:rxandroid:1.1.0' compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4' compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4' compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0-beta4'
2、在AndroidManifest.xml中添加网络权限
<uses-permission android:name="android.permission.INTERNET"/>
3、 Retrofit 与 RxJava 的结合
3.1、单独使用Retrofit是这样的:Retrofit.Builder builder = new Retrofit.Builder(); HttpApi httpApi = builder.baseUrl(HttpUtils.BaseURL) .addConverterFactory(GsonConverterFactory.create()) .build() .create(HttpApi.class); Map<String, String> keyMap = null; keyMap = new HashMap<>(); keyMap.put("offset","10"); keyMap.put("limit","0"); keyMap.put("isShowTimeOutMission","false"); httpApi.getData(keyMap).enqueue(new Callback<Response>() { @Override public void onResponse(Call<Response> call, retrofit2.Response<Response> response) {} @Override public void onFailure(Call<Response> call, Throwable t) {} });
上述代码中HttpApi.class的代码如下,注意这里getData()返回的数据类型为Call:
/** * Created by bai-qiang.yang on 2017/3/6. */ public interface HttpApi { @FormUrlEncoded @POST("/install-mission/update-task") public abstract Call<Response> getData(@FieldMap Map<String,String> keyMap); }
3.2、Retrofit 与 RxJava 结合使用是这样的:
3.2.1、添加如下依赖(这里之前我已经添加过了):
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0-beta4'
3.2.2、代码如下(注意添加了创建builder对象时addCallAdapterFactory(RxJavaCallAdapterFactory.create())方法):
Retrofit.Builder builder = new Retrofit.Builder(); HttpApi httpApi = builder.baseUrl(HttpUtils.BaseURL) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build() .create(HttpApi.class); Map<String, String> keyMap = null; keyMap = new HashMap<>(); keyMap.put("offset","10"); keyMap.put("limit","0"); keyMap.put("isShowTimeOutMission","false"); Observable<Response> observable = httpApi.getData(keyMap); observable.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<Response>() { @Override public void onCompleted() { System.out.println("onCompleted------>"); } @Override public void onError(Throwable e) { System.out.println("error---->"+e.getMessage()); } @Override public void onNext(Response response) { /**在这里改变UI*/ System.out.println("msg---->"+response.getMsg()); } });
上述代码中HttpApi.class的代码如下,注意这里getData()返回的数据类型为Observable:
/** * Created by bai-qiang.yang on 2017/3/6. */ public interface HttpApi { @FormUrlEncoded @POST("/install-mission/update-task") public abstract Observable<Response> getData(@FieldMap Map<String,String> map); }
这样Retrofit和RxJava就结合在一起了,下面是我写的一个简单的封装:
/** * Created by bai-qiang.yang on 2017/3/6. */ public class HttpManager { private Retrofit mRetrofit; private HttpApi mHttpApi; public static String BaseURL = "http://app.reward.test.utouu.com"; //搞成单例 public HttpManager() {} public static final HttpManager httpManager = new HttpManager(); public static HttpManager getInstance() { return httpManager; } public <T> T initRetrofit(Class<T> T) { if (mRetrofit == null) { mRetrofit = new Retrofit.Builder() .baseUrl(BaseURL) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build(); } T t = mRetrofit.create(T); return t; } public <T> void toSubscribe(Observable o,Subscriber<T> s){ o.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(s); } }
上述代码中HttpApi.class的代码如下:
/** * Created by bai-qiang.yang on 2017/3/6. */ public interface HttpApi { @FormUrlEncoded @POST("/install-mission/update-task") public abstract Observable<Response> getData(@FieldMap Map<String,String> keyMap); }
使用如下:
Map<String, String> keyMap = null; keyMap = new HashMap<>(); keyMap.put("offset","10"); keyMap.put("limit","0"); keyMap.put("isShowTimeOutMission","false"); if (mInstance == null) { mInstance = HttpManager.getInstance(); } if (mObservable == null) { mObservable = mInstance .initRetrofit(HttpApi.class) .getData(keyMap); } mInstance.toSubscribe(mObservable, new Subscriber<Response>() { @Override public void onCompleted() { System.out.println("complete---->"); } @Override public void onError(Throwable e) { System.out.println("error---->"+e.getMessage()); } @Override public void onNext(Response response) { /**在这里更新UI*/ System.out.println("msg---->"+response.getMsg()); } });
相关文章推荐
- RxJava和Retrofit结合使用详解
- RxJava和Retrofit2.0的结合使用
- Android RxJava/RxAndroid结合Retrofit使用
- RxJava2.0 和 Retrofit 结合使用时的配置问题
- Retrofit和RxJava结合使用例子分析
- retrofit2+rxjava的结合使用
- RxJava和Retrofit结合使用
- APP实用开发—RxJava 和 Retrofit 结合使用
- Retrofit与RxJava的结合使用
- RxJava,Retrofit,OkHttp3结合使用
- Android 中 Retrofit 结合 RxJava使用
- RxJava和Retrofit结合使用
- Retrofit+Rxjava结合使用(三)
- Rxjava和Retrofit结合使用的案例
- Retrofit2.0的学习以及Rxjava与Retrofit2的结合使用
- RxJava,Retrofit,OkHttp3在项目中结合使用
- Android 中 Retrofit 结合 RxJava使用
- Retrofit结合RxJava使用说明
- Retrofit与Rxjava结合使用
- Android框架学习之Retrofit(二)RxJava和Retrofit2.0的结合使用