【问题标题】:RxAndroid: Is there a clean way to get a Subscriber object from an Observable?RxAndroid:有没有一种从 Observable 获取订阅者对象的干净方法?
【发布时间】:2017-04-17 13:19:12
【问题描述】:

所以从我的视图模型中,我在另一个类中调用了我的 Observable:

 getAuthentication.kickoff()
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Subscriber<RxOkHttpResponse>() {
                @Override
                public final void onCompleted(  ) {
                    getAlbums();
                }

                @Override
                public final void onError(Throwable e) {
                    userMsgHandler.showToast(mParent,mParent.getString(R.string.error_cannot_authenticate));
                }

                @Override
                public final void onNext(RxOkHttpResponse response) {

                    mSubscription = response.subscription;

                }
            }); 

所以这个调用显然返回了一个 Observable。所以我想知道在返回的这个 Observable 上调用subscriber.unsubscribe() 的最干净的方法是什么,或者是否有一种方法(现在我在 onNext 中返回它——但我对此并不满意)

那么有没有办法格式化代码以将 .subscribe() 存储在成员变量中:

.observeOn(AndroidSchedulers.mainThread())
            mSubscriber = .subscribe(new Subscriber<RxOkHttpResponse>() {

...

我正在使用 v 1.1.0

【问题讨论】:

  • @John O'Reilly ...是的,但是如何将该调用返回到成员变量并保持相同的代码格式?
  • 对不起,我删除了我的评论,因为我正在编辑它变得很长!将其移至下面的答案。不确定我是否理解您的问题?

标签: android observable subscription rx-android


【解决方案1】:

答案取决于您使用的是 RxJava 1 还是 2。如果是 RxJava 1,subscribe() 将返回 Subscription 实例,然后您可以调用 unsubscribe()。但是对于 RxJava 2,我相信您需要添加 onSubscribe()

【讨论】:

    【解决方案2】:

    这是我正在寻找的语法:

    mSubscriber = ( getAuthentication.kickoff()
                    .subscribeOn(Schedulers.newThread())
                    .observeOn(AndroidSchedulers.mainThread())
            ).subscribe(new Subscriber<RxOkHttpResponse>() {
    
              ...
    

    现在我可以轻松地将 mSubscriber 存储在我的视图模型中,以便在我的 Activity 中由 OnDestroy() 触发清理

    【讨论】:

      猜你喜欢
      • 2022-08-11
      • 2017-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-28
      • 1970-01-01
      • 2012-09-07
      • 1970-01-01
      相关资源
      最近更新 更多