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

前端之家收集整理的这篇文章主要介绍了android – 使用回调/监听器链接RxJava observable前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用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中包装任何基于回调的异步操作.

原文链接:https://www.f2er.com/android/318517.html

猜你在找的Android相关文章