RxAndroid:是否有一种干净的方式从Observable获取订阅服务器对象?

问题描述:

所以从我的视图模型我打电话给我的可观察到的另一个类:RxAndroid:是否有一种干净的方式从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; 

       } 
      }); 

所以这显然调用返回一个观测。所以我想知道什么是最简洁的方式来调用subscriber.unsubscribe()在这个返回的Observable上,或者甚至有一种方法(现在我在onNext中返回 - 但我不喜欢这样)

那么,有没有一种方法来设置代码的格式来存储.subscribe()的一个成员变量:

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

... 

我使用1.1.0

+0

@John O'Reilly ...是的,但如何将该调用返回成员变量并保持相同的代码格式? – Mike6679

+0

对不起,我删除了我的评论,因为它在我编辑它的过程中变得越来越长!移动它以回答下面。不知道我理解你的问题吗? –

的答案取决于你使用RxJava 1或2.在RxJava 1的情况下,subscribe()将返回Subscription实例,然后您可以调用unsubscribe()。然而,对于RxJava 2我相信你需要添加onSubscribe()

这是我一直在寻找的语法:

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

      ... 

现在,我可以很容易地在我的视图模型存储mSubscriber用于清理通过的OnDestroy触发()我的活动