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嵌套两层网络请求

    • 先获取所有名字
    • 再根据所有名字来获取个人信息

leogyy
17 声望2 粉丝

Android developer 爱技术, 爱开源, 爱赚钱。互联网中毒症患者,Want to make a good app!