android– 使用retrofit和rx java的多个api请求

android– 使用retrofit和rx java的多个api请求,第1张

概述我是android的新手,我有一个场景,我想从多个api获取数据.假设api_a,api_b,api_c,api_d.这些api彼此独立,但我想在混合RecyclerView(水平和垂直)中显示来自这些api的数据.所以我想以这样的方式进行这些api调用,以便我可以一次获取每个api数据,以便我可以在回收器视图中显示.我已经

我是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请求所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1104590.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存