美文网首页
干货,RxJava Retrofit的有力封装,简便使用

干货,RxJava Retrofit的有力封装,简便使用

作者: sun_wenming | 来源:发表于2017-10-09 18:19 被阅读0次

    源码地址: Rxjava2Retorfit封装

    PS:服务器,使用phpstud集成的本地服务器。用的ThinkPhp框架。(原谅我没有网络服务器。。)

    你只需把后台 代码 解压到 phpstud安装目录的WWW下面。
    如:D:\phpStudy\WWW

    后台代码:SwmSignPhp.zip

    数据表导入进 PHPmyadmin即可。wm_sign.sql

    运行结果(没什么好展示的了、、):

    RxJava2Retrofit请求.gif

    一、先看一下如何使用的。

    如没有特殊需求,你只需要处理onNext()方法中传送的基类数据即可,强转为你所需要的。请求失败等操作在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

    创建ApiService接口,做URL处理

    ApiService.java

    关于URL的处理,可以参考官网或其他
    Retrofit官网
    如:

    @GET("Task/findProgress")
        Observable<TaskListBean> getTaskList(@Query("userId") int userId);
    

    TaskListBean

    TaskListBean为你 返回的json 生成的 javaBean文件。

    封装的工具类,可以看一下

    SwmRxHttpUtils.java

    源码地址: Rxjava2Retorfit封装

    最后贴一个,我封装好的 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);
                                    }
                                });
    
    

    相关文章

      网友评论

          本文标题:干货,RxJava Retrofit的有力封装,简便使用

          本文链接:https://www.haomeiwen.com/subject/swpuyxtx.html