美文网首页RxJava入门到精通
Android进阶学习RxJava(七)RxJava与Retro

Android进阶学习RxJava(七)RxJava与Retro

作者: 郝大富 | 来源:发表于2020-11-05 16:08 被阅读0次

    Retrofit 为什么要和 RxJava 一起用

    这么用可以更优雅的写功能
    这么用是上流社会[手动狗头]
    如果是新手,建议分别使用两个库做几个小项目后再实现交火,效果更好

    安排

    一. 导入所有依赖

    
        implementation 'com.squareup.retrofit2:retrofit:2.1.0'
        implementation 'com.squareup.retrofit2:converter-gson:2.1.0'
        implementation 'com.squareup.retrofit2:adapter-rxjava:2.0.2'
        implementation 'com.google.code.gson:gson:2.8.5'
        implementation 'io.reactivex:rxjava:1.1.1'
        implementation 'io.reactivex:rxandroid:1.0.1'
    
    

    二. 加入网络权限

    <uses-permission android:name="android.permission.INTERNET"/>
    

    使用上一篇文章的接口,更详细的请看上一篇

    三. 配置 Retrofit,比原来多一行,一定要记得加上

    
    retrofit = new Retrofit.Builder()
            .baseUrl(Urls.Base)
            .addConverterFactory(GsonConverterFactory.create())
            .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) //比原来多的一行
            .build();
    
    

    四. 先写 Retrofit 接口包装类

    
    public interface API_Protocol1 {
    
        @POST(Urls1.all_name)
        Call<AllNameBean> getAllName();
    
        @POST(Urls1.get_name_info)
        Call<NameInfoBean> getNamesInfo(@Query("name") String name);
    
    }
    
    

    五. 改装为 RxJava 请求包装类

    
    public interface API_Protocol1 {
    
        @POST(Urls1.all_name)
        Observable<AllNameBean> getAllName();
    
        @POST(Urls1.get_name_info)
        Observable<NameInfoBean> getNamesInfo(@Query("name") String name);
    
    }
    
    

    六. 发起网络请求

    
    API_Protocol1 API_protocol = retrofit.create(API_Protocol1.class);
    Subscription subscribe = API_protocol.getAllName()
            .subscribeOn(Schedulers.newThread())//请求在新的线程中执行
            .observeOn(Schedulers.io())         //请求完成后在io线程中执行
            .doOnNext(new Action1<AllNameBean>() {
                @Override
                public void call(AllNameBean allName) {
                    LogUtils.e(allName.getInfo());
                }
            })
            .observeOn(AndroidSchedulers.mainThread())//最后在主线程中执行
            .subscribe(new Action1<AllNameBean>() {
                @Override
                public void call(AllNameBean allNameBean) {
                    LogUtils.e(allNameBean.getInfo());
                }
            });
    
    

    总结

    • 优秀于阅读的代码
    • 切不可为 Rx 而强行 RX
    • 下一篇进行RxJava嵌套两层网络请求
      • 先获取所有名字
      • 再根据所有名字来获取个人信息

    相关文章

      网友评论

        本文标题:Android进阶学习RxJava(七)RxJava与Retro

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