干货,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的有力封装,简便使用的主要内容,如果未能解决你的问题,请参考以下文章

retrofit+RXjava二次封装

Android RxJava2+Retrofit2单文件下载监听进度封装

基于Retrofit+RxJava 封装 Leopard 网络框架

retrofit2+rxjava+mockserver使用和理解

retrofit2+rxjava+mockserver使用和理解

RxJava2+Retrofit2+RxLifecycle3+OkHttp3网络请求封装(动态演示)