干货,RxJava和Retrofit的有力封装,简便使用
Posted 文明孙
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了干货,RxJava和Retrofit的有力封装,简便使用相关的知识,希望对你有一定的参考价值。
http://www.jianshu.com/u/9279ddcfdfb3
http://blog.csdn.net/qq_27853161
PS:服务器,使用phpstud集成的本地服务器。用的ThinkPhp框架。(原谅我没有网络服务器。。)
你只需把后台 代码 解压到 phpstud安装目录的WWW下面。
如:D:\phpStudy\WWW
后台代码:SwmSignPhp.zip:https://gitee.com/IsSwm/Rxjava2Retorfit/blob/master/SwmSignPhp.zip
数据表导入进 PHPmyadmin即可。wm_sign.sql : https://gitee.com/IsSwm/Rxjava2Retorfit/blob/master/wm_sign.sql
运行结果(没什么好展示的了、、):
RxJava2Retrofit请求.gif
一、先看一下如何使用的。
如没有特殊需求,你只需要处理onNext()方法中传送的基类数据即可,强转为你所需要的。请求失败等操作在SwmRxHttpUtils.java : https://gitee.com/IsSwm/Rxjava2Retorfit/blob/master/app/src/main/java/com/wm/rxjava2retorfit/utils/SwmRxHttpUtils.java 已经做好了处理
// 请求数据
private void requestTaskListData() {
new SwmRxHttpUtils(new SwmRxHttpUtils.SwmIsRequestComListener() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(BaseData baseData) {
TaskListBean taskListBean = (TaskListBean) baseData;
List<TaskListBean.DataBean> taskListBeanData = taskListBean.getData();
// 将请求到的数据 添加的 适配器的 集合中。
for (TaskListBean.DataBean dataBean :
taskListBeanData) {
TaskItem taskItem = new TaskItem(TaskItem.TASK_LIST_ITEM);
taskItem.setDataBean(dataBean);
mTaskItems.add(taskItem);
}
taskListBeanData.clear();
mTaskItemQuickAdapter.notifyDataSetChanged();
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
}).getTaskList(1);
二、准备工作
导入所需库
在Project的build.gradle下allprojects中导包
allprojects {
repositories {
google()
jcenter()
maven { url 'https://jitpack.io' }
}
}
在Module的build.gradle下dependencies中导包
dependencies {
// 导入 rxjava rxandroid 包
implementation 'io.reactivex.rxjava2:rxjava:2.1.5'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
// 导入 retrofit 库
implementation 'com.squareup.retrofit2:retrofit:2.3.0'
// 导入 gson 转换器
implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
// 导入Retrofit.addCallAdapterFactory(RxJava2CallAdapterFactory.create())的配置包
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
// 导入 log拦截器
compile 'com.parkingwang:okhttp3-loginterceptor:0.5'
}
在Application 中 初始化 okhttp 和 retrofit配置,并创建服务器接口(ApiService)
MyApplication.java :https://gitee.com/IsSwm/Rxjava2Retorfit/blob/master/app/src/main/java/com/wm/rxjava2retorfit/app/MyApplication.java
创建ApiService接口,做URL处理
ApiService.java
https://gitee.com/IsSwm/Rxjava2Retorfit/blob/master/app/src/main/java/com/wm/rxjava2retorfit/api/ApiService.java
关于URL的处理,可以参考官网或其他
Retrofit官网 : http://square.github.io/retrofit/如:
@GET("Task/findProgress")
Observable<TaskListBean> getTaskList(@Query("userId") int userId);
TaskListBean
TaskListBean为你 返回的json 生成的 javaBean文件。
封装的工具类,可以看一下
SwmRxHttpUtils.java
最后贴一个,我封装好的 okhttp工具类,请求代码
只需 new 出来网络请求工具类, 随后 调用 get或者post方法,添加一个请求完成的监听。没了。 感觉比上方的更轻松。有时间贴出来。
// 签到操作
new SwmOkhttpNetUtils(SignSignBean.class)
.getRequestFromServer(WholeUrl.SIGN_SIGN + "?userId=1")
.setMyIsRequestCompleteListener(new SwmOkhttpNetUtils.MyIsRequestCompleteListener() {
@Override
public void requestNetSuccess(BaseData baseData) {
SignSignBean signSignBean = (SignSignBean) baseData;
status.set(i, true);
notifyDataSetChanged();
SwmToastUtils.showSingletonToast(context.getString(R.string.sign_suc));
if (onSignedSuccess != null) {
onSignedSuccess.OnSignedSuccess(signSignBean);
}
}
@Override
public void requestNetStatusNot200(BaseData baseData) {
if (onSignedSuccess != null) {
onSignedSuccess.OnSignedFail();
}
}
@Override
public void requestNetFail(Exception e) {
}
@Override
public void requestComplete() {
viewHolder.tv.setEnabled(true);
}
});
长按上方二维码识别关注A文明
以上是关于干货,RxJava和Retrofit的有力封装,简便使用的主要内容,如果未能解决你的问题,请参考以下文章
Android RxJava2+Retrofit2单文件下载监听进度封装
基于Retrofit+RxJava 封装 Leopard 网络框架
retrofit2+rxjava+mockserver使用和理解