前言
Retrofit和Rxjava单独使用的文章可以看本人写的这两篇,本文是在Retrofit网络请求框架这篇文章的项目上改动的。
Android Retrofit网络请求框架
Android RxJava3入门
操作
添加依赖
//retrofit与Rxjava3结合
implementation 'com.squareup.retrofit2:adapter-rxjava3:2.9.0'
修改接口管理器
在Retrofit中添加
addCallAdapterFactory(RxJava3CallAdapterFactory.create())//支持RxJava
修改接口
在写接口之前,我们先看看接口返回的数据
https://api.uomg.com/api/rand.music?sort=热歌榜&format=json
可以看见这个接口外面还有嵌套一层,所以需要写一个数据包裹类把数据再包一层
/**
* 数据包裹层
*/
public class ResponseBean<T> {
/** 失败 */
public static final int Fail = 500;
/** 成功 */
public static final int SUCCESS = 200;
/** 本次接口请求返回的状态 */
public int code = Fail;
/** 对code的简单描述 */
public String msg = "";
/** 数据对象 */
public T data;
public boolean isSuccess() {
return code == SUCCESS;
}
}
然后开始写接口
//获取网易云音乐随机歌曲
@GET("api/rand.music")
Observable<ResponseBean<MusicBean>> getMusicData(@Query("sort") String sort, @Query("format") String format);
可以看见,Retrofit+Rxjava就是把原来Retrofit的Call改成了Observable
访问
private void getMusicData() {
ApiServiceManager.get().create(ApiService.class)
.getMusicData("热歌榜", "json")
.subscribeOn(Schedulers.io())//在子线程中进行Http访问
.observeOn(AndroidSchedulers.mainThread())//UI线程处理返回接口
.subscribe(new Observer<ResponseBean<MusicBean>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
}
@Override
public void onNext(@NonNull ResponseBean<MusicBean> musicBeanResponseBean) {
mBinding.contentTv.setText(musicBeanResponseBean.data.name + " " + musicBeanResponseBean.data.artistsname);
}
@Override
public void onError(@NonNull Throwable e) {
}
@Override
public void onComplete() {
}
});
}
使用Rxjava主要是要做好线程的调度