1.依赖
implementation 'com.amitshekhar.android:rx2-android-networking:1.0.0'
//rxjava
implementation 'io.reactivex.rxjava2:rxjava:2.0.1'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
2.代码
1.一个接口的请求
Rx2AndroidNetworking.get("http://c.m.163.com/nc/article/list/T1371543208049/0-20.html")
.addHeaders("User-Agent","Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:0.9.4)")
.build()
.getObjectObservable(CBAbean.class)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<CBAbean>() {
@Override
public void accept(CBAbean cbAbean) throws Exception {
List<CBAbean.T1371543208049Bean> beans = cbAbean.getT1371543208049();
list.addAll(beans);
myAdapter.notifyDataSetChanged();
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
Log.d(TAG, "accept: "+throwable.getMessage());
}
});
2.两个接口的有联系的请求
{
Rx2AndroidNetworking
.get("http://www.tngou.net/api/food/list")
.addQueryParameter("rows", 1 + "")
.build()
.getObjectObservable(FoodList.class) // 发起获取食品列表的请求,并解析到FootList
.subscribeOn(Schedulers.io()) // 在io线程进行网络请求
.observeOn(AndroidSchedulers.mainThread()) // 在主线程处理获取食品列表的请求结果
.doOnNext(new Consumer<FoodList>() {
@Override
public void accept(@NonNull FoodList foodList) throws Exception {
// 先根据获取食品列表的响应结果做一些操作
Log.e(TAG, "accept: doOnNext :" + foodList.toString());
mRxOperatorsText.append("accept: doOnNext :" + foodList.toString()+"\n");
}
})
.observeOn(Schedulers.io()) // 回到 io 线程去处理获取食品详情的请求
.flatMap(new Function<FoodList, ObservableSource<FoodDetail>>() {
@Override
public ObservableSource<FoodDetail> apply(@NonNull FoodList foodList) throws Exception {
if (foodList != null && foodList.getTngou() != null && foodList.getTngou().size() > 0) {
return Rx2AndroidNetworking.post("http://www.tngou.net/api/food/show")
.addBodyParameter("id", foodList.getTngou().get(0).getId() + "")
.build()
.getObjectObservable(FoodDetail.class);
}
return null;
}
})
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<FoodDetail>() {
@Override
public void accept(@NonNull FoodDetail foodDetail) throws Exception {
Log.e(TAG, "accept: success :" + foodDetail.toString());
mRxOperatorsText.append("accept: success :" + foodDetail.toString()+"\n");
}
}, new Consumer<Throwable>() {
@Override
public void accept(@NonNull Throwable throwable) throws Exception {
Log.e(TAG, "accept: error :" + throwable.getMessage());
mRxOperatorsText.append("accept: error :" + throwable.getMessage()+"\n");
}
});
}
3。Retrofit+Rxjava
public interface IFoodService{
@GET("article/list/0/json?cid=60")
Observable<ResponseBody> getCall(); //这里不同
}
public void qingqiu(){
Retrofit build = new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.baseUrl("http://www.wanandroid.com/")
.build();
IFoodService iFoodService = build.create(IFoodService.class);
Observable<ResponseBody> call = iFoodService.getCall();
call.subscribeOn(Schedulers.io()) //直接使用rxjava不用再同步异步
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<ResponseBody>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(ResponseBody value) {
try {
Log.e("zll", "onNext: "+value.string());
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
多个接口合并请求
Observable<QuanWangBady> quangWang = NetManager.getNetManager().getNetService().getQuangWang();
Observable<Beanner> ceHuaReques = NetManager.getNetManager().getNetService().getCeHuaReques();
Observable<AdvertisingBean> advertising = NetManager.getNetManager().getNetService(NetConfig.REMEN).getAdvertising();
Observable.concat(ceHuaReques, advertising,quangWang)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Object>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Object o) {
if(o instanceof Beanner){
Beanner o1 = (Beanner) o;
String s = o1.getBanner().toString();
LogUtil.e("zll",s);
}
if(o instanceof AdvertisingBean){
AdvertisingBean o1 = (AdvertisingBean) o;
LogUtil.e("zll",o1.toString());
}
if(o instanceof QuanWangBady){
QuanWangBady o1 = (QuanWangBady) o;
LogUtil.e("zll",o1.getData().toString());
}
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
在一个集合中加一个新的集合显示
public Observable<List<Info>> getInfos(Integer cursor, Integer limit, String labelId) {
return getService().getInfos(cursor, limit, false, labelId).map(new Function<Page<Info>, List<Info>>() {
@Override
public List<Info> apply(Page<Info> infoPage) throws Exception {
return infoPage.records;
}
}).filter(new Predicate<List<Info>>() {
@Override
public boolean test(List<Info> infos) throws Exception {
return cursor == 1;
}
}).flatMap(new Function<List<Info>, ObservableSource<List<Info>>>() {
@Override
public ObservableSource<List<Info>> apply(List<Info> infos) throws Exception {
return getSubjectList().map(new Function<List<SubJectBean>, List<Info>>() {
@Override
public List<Info> apply(List<SubJectBean> subJectBeans) throws Exception {
if (subJectBeans.size() > 0) {
Info info = new Info();
info.recruitmented = "123";
info.articleTopics = subJectBeans;
if (infos.size() > 0) {
infos.add(1, info);
} else {
infos.add(0, info);
}
}
return infos;
}
});
}
});