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嵌套两层网络请求
- 先获取所有名字
- 再根据所有名字来获取个人信息
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。