android – 使用回调监听器链接RxJava observable

android – 使用回调监听器链接RxJava observable,第1张

概述我正在使用Obtrables的Retrofit,并希望链接可观察量.通常它适用于map()或flatMap()等函数,因为api返回执行任务的Observable.但在这种情况下,我必须做以下事情: >来自api的getKey() >在另一个库Foo中使用返回的键,并等待调用回调. >当回调返回时,将结果发送到api. 我希望这是一个单一的链接调用,所以我只需要订阅一次.我猜我可以使用merge( 我正在使用Obtrables的Retrofit,并希望链接可观察量.通常它适用于map()或flatMap()等函数,因为API返回执行任务的Observable.但在这种情况下,我必须做以下事情:

>来自API的getKey()
>在另一个库Foo中使用返回的键,并等待调用回调.
>当回调返回时,将结果发送到API.

我希望这是一个单一的链接调用,所以我只需要订阅一次.我猜我可以使用merge()或join()或其他东西,但不确定处理回调的最佳方法是什么.

有没有办法让这更好?这是我到目前为止:

API.getKey().subscribe(new Action1<String>() {   @OverrIDe   public voID call(String key) {      Foo foo = new Foo();      foo.setAwesomeCallback(new AwesomeCallback() {         @OverrIDe         public voID onAwesomeReady(String awesome) {            API.sendAwesome(awesome)                    .subscribe(new Action1<VoID>() {                       @OverrIDe                       public voID call(VoID aVoID) {                           handleAwesomeSent();                       }                    });         }      });      foo.makeAwesome();   }});
解决方法 调整clemp6r的解决方案,这是另一个既不需要主题也不需要嵌套订阅的解决方案:
API.getKey().flatMap(new Func1<String,Observable<String>>() {    @OverrIDe    public Observable<String> call(String key) {        return Observable.create(new Observable.OnSubscribe<String>(){            @OverrIDe            public voID call(final Subscriber<? super String> subscriber) {                Foo foo = new Foo();                foo.setAwesomeCallback(new AwesomeCallback() {                    @OverrIDe                    public voID onAwesomeReady(String awesome) {                        if (! subscriber.isUnsubscribed()) {                            subscriber.onNext(awesome);                            subscriber.onComplete();                        }                    }                });                foo.makeAwesome();            }         });}).flatMap(new Func1<String,Observable<String>>() {    @OverrIDe    public Observable<String> call(String awesome) {        return sendAwesome(awesome);   }}).subscribe(new Action1<VoID>() {    @OverrIDe    public voID call(VoID aVoID) {        handleAwesomeSent();    }});

一般来说,我认为总是可以使用Observable.create()在Observable中包装任何基于回调的异步 *** 作.

总结

以上是内存溢出为你收集整理的android – 使用回调/监听器链接RxJava observable全部内容,希望文章能够帮你解决android – 使用回调/监听器链接RxJava observable所遇到的程序开发问题。

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

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

原文地址:https://54852.com/web/1139145.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存