rxjava2 结合retrofit2进行业务封装
来源:互联网 发布:怎么打开淘宝网址链接 编辑:程序博客网 时间:2024/06/05 14:33
rxjava2 结合retrofit2进行业务封装
第一步 添加依赖:
compile 'io.reactivex.rxjava2:rxjava:2.0.0' compile 'io.reactivex.rxjava2:rxandroid:2.0.0' compile 'com.squareup.retrofit2:converter-jackson:2.0.0' compile 'com.squareup.retrofit2:retrofit:2.2.0'
第二步 定义一个接口类 例如:
public interface UserService {@FormUrlEncoded@POST("user/getchecknum")Observable<BaseEntity<ChecknumBean>> getCheckNumber(@Field("phoneNum") String phoneNum);}
@FormUrlEncoded为URL编码 retrofit2.x必须要
@POST(“user/getchecknum”) 定义一个POST请求 user/getchecknum 为URL的一部分
getCheckNumber为一个普通的方法后来会调用 返回一个Observable,Observable的泛型为返回的数据用BaseEntity来接收
来看下BaseEntity:
public class BaseEntity<T> implements Serializable { private int returnCode; private String returnMsg; private T data; public int getReturnCode() { return returnCode; } public void setReturnCode(int returnCode) { this.returnCode = returnCode; } public String getReturnMsg() { return returnMsg; } public void setReturnMsg(String returnMsg) { this.returnMsg = returnMsg; } public T getData() { return data; } public void setData(T data) { this.data = data; }}
再来看ChecknumBean:
public class ChecknumBean { private String checkNum; public String getCheckNum() { return checkNum; } public void setCheckNum(String checkNum) { this.checkNum = checkNum; } }
第三步 创建Retrofit
我是这么创建的 你可以根据业务来创建:
public class RetroFactory { private RetroFactory() { } private static String baseUrl = "http://58.213.75.45/gaojie/"; private static OkHttpClient httpClient = new OkHttpClient.Builder() .connectTimeout(30, TimeUnit.SECONDS) .readTimeout(30, TimeUnit.SECONDS) .build(); private static UserService userService = new Retrofit.Builder() .baseUrl(baseUrl) .addConverterFactory(JacksonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .client(httpClient) .build() .create(UserService.class); public static UserService getUserService() { return userService; }}
发送请求
RetroFactory.getUserService().getCheckNumber("13888888888") .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<BaseEntity<ChecknumBean>>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(BaseEntity<ChecknumBean> value) { } @Override public void onError(Throwable e) { } @Override public void onComplete() { } });
这是最简单的用法了. 用的最原始的Observer 返回的数据有成功 有失败 情况很多 我们可以创建个BaseObserver 来进行数据的预处理:
public abstract class MyObserver<T> implements Observer<BaseEntity<T>> { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(BaseEntity<T> value) { if (value.getReturnCode() == 0) { onHandleSuccess(value.getData()); } else { onHandleError(value.getReturnCode(),value.getReturnMsg()); } } protected abstract void onHandleSuccess(T data); protected abstract void onHandleError(int returnCode, String returnMsg); @Override public void onError(Throwable e) { } @Override public void onComplete() { }}
在这个预处理中我只是根据我自己的实际情况来做的 我们后来返回的returnCode==0的时候才算真正的成功 其他returnCode为其他情况 所以我就抽出两个方法让子类实现
在onError(Throwable e)中可以对异常进行统一的处理 就不用交个子类处理了
再次请求就是这么写了:
RetroFactory.getUserService().getCheckNumber("1388888888") .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new MyObserver<ChecknumBean>() { @Override protected void onHandleSuccess(ChecknumBean data) { } @Override protected void onHandleError(int returnCode, String returnMsg) { } });
0 0
- rxjava2 结合retrofit2进行业务封装
- retrofit2+rxjava2封装解析
- 简单封装retrofit2+rxjava2
- Rxjava2+okhttp3+Retrofit2封装
- Rxjava2+Retrofit2.0进行封装(总地址)
- RxJava2 + Retrofit2 优雅简洁封装
- Retrofit2+Rxjava2联网的封装
- Retrofit2+RxJava2进行网络请求
- Retrofit2.0与RXJava2.0最新结合:
- 非常简易的Rxjava2+Retrofit2封装
- Retrofit2+Rxjava2之优雅的封装
- 1、RxJava2 & Retrofit2封装实践 简介
- 2、RxJava2 & Retrofit2 封装实践 初始化
- Rxjava2 Retrofit2 和 mvp再封装
- Rxjava2和Retrofit2网络库的封装
- rxjava2+rxandroid2+retrofit2 封装网络请求
- Retrofit2+Rxjava2网络请求框架的封装
- rxjava2 + retrofit2
- ajax的traditional属性
- Fragment生命周期(add,replace,息屏等情况)
- KMP——BZOJ3670/Luogu2375 [Noi2014]动物园
- QT多线程中的互斥与同步
- JZOJ5012. 远行
- rxjava2 结合retrofit2进行业务封装
- 关于函数模版编译出现链接错误
- Shell 教程
- WebService代码
- Java中有关this的一个问题
- MongoDB实战
- 概念模型和关系模型
- 单向链表反转(倒置)问题
- Android开发之深入理解Android 7.0系统权限更改相关文档