我是android的新手,我有一个场景,我想从多个API获取数据.假设API_a,API_b,API_c,API_d.这些API彼此独立,但我想在混合Recycler VIEw(水平和垂直)中显示来自这些API的数据.所以我想以这样的方式进行这些API调用,以便我可以一次获取每个API数据,以便我可以在回收器视图中显示.
我已经使用了改造2,但为此我必须逐个链接它们,这是非常冗长的,我认为这不是一个可行的方法.我对RX JAVA知之甚少,但我只知道如何一次发出一个请求.请帮忙
解决方法:
至少有两种方法可以实现这一目标 –
1)使用RxJava Zip运算符(用于并行请求)
获取所有可观察量
Observable<ResponseType1> observable1 = retrofit.getAPI_a();Observable<ResponseType2> observable2 = retrofit.getAPI_b();Observable<ResponseType3> observable3 = retrofit.getAPI_c();
压缩可观察量以获得最终可观察量
Observable<List<String>> result = Observable.zip(observable1.subscribeOn(Schedulers.io()), observable2.subscribeOn(Schedulers .io()), observable3.subscribeOn(Schedulers.io()), new Function3<ResponseType1, ResponseType2, ResponseType3, List<String>>() { @OverrIDe public List<String> apply(ResponseType1 type1, ResponseType2 type2, ResponseType3 type3) { List<String> List = new ArrayList(); List.add(type1.data); List.add(type2.data); List.add(type3.data); return List; }});
现在订阅结果可观察量
result.observeOn(AndroIDSchedulers.mainThread()) .subscribeWith(new Observer<List<String>>() { @OverrIDe public voID onSubscribe(disposable d) { } @OverrIDe public voID onNext(List<String> s) { Log.d(TAG, "s is the List with all the data"); } @OverrIDe public voID one rror(Throwable e) { Log.e(TAG, e.getMessage()); } @OverrIDe public voID onComplete() { } });
2)使用RxJava flatMap()运算符. (一个接一个地连续请求)
这是简单的请求链接
List<String> result = new ArrayList<>(); disposable disposable = retrofit.getAPI_a() .subscribeOn(Schedulers.io()) .flatMap((Function<ResponseType1, ObservableSource<ResponseType2>>) response1 -> { result.add(response1.data); return retrofit.getAPI_b(); }) .flatMap((Function<ResponseType2, ObservableSource<ResponseType3>>) response2 -> { result.add(response2.data); return retrofit.getAPI_c(); }) .map(response3 -> { result.add(response3.data); return response3; }) .observeOn(AndroIDSchedulers.mainThread()) .subscribeWith(new disposableObserver<Response3>() { @OverrIDe public voID onNext(Response3 response3) { Log.d(TAG, "result variable will have all the data"); } @OverrIDe public voID one rror(Throwable e) { Log.e(TAG, e.getMessage()); } @OverrIDe public voID onComplete() { } });
总结 以上是内存溢出为你收集整理的android – 使用retrofit和rx java的多个api请求全部内容,希望文章能够帮你解决android – 使用retrofit和rx java的多个api请求所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)