2017-04-08 86 views
1

我有以下類,我想返回訂閱對象或其他東西,所以我可以從我已經引用subscribe()方法取消請求,但訂閱(觀察者)返回void! 我該怎麼做?如何取消訂閱rxJava請求

public abstract class MainPresenter<T> { 
protected <T> Disposable subscribe(Observable<T> observable, Observer<T> observer) { 
observable.subscribeOn(Schedulers.newThread()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(observer); 

} 

[新更新] 我用這種方式暫時的,我在等待更好的解決方案:

protected <T> DisposableMaybeObserver subscribe(final Maybe<T> observable, 
               final Observer<T> observer) { 
    return observable.subscribeOn(Schedulers.io()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribeWith(new DisposableMaybeObserver<T>() { 
       @Override 
       public void onSuccess(T t) { 
        observer.onNext(t); 
       } 

       @Override 
       public void onError(Throwable e) { 
        observer.onError(e); 
       } 

       @Override 
       public void onComplete() { 
        observer.onComplete(); 
       } 
      }); 
} 

[新更新2] [截圖] [https://i.stack.imgur.com/mioth.jpg]]

[新更新3] [當你需要

private Disposable mDisposable; 

public abstract class MainPresenter<T> { 
protected Disposable subscribe(Observable<T> observable, DisposableObserver<T> observer) { 
mDisposable = observable.subscribeOn(Schedulers.io()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribeWith(observer); 

return mDisposable; 

} 

然後:] 1

+0

使用'DisposableObserver'並簡單地返回它的實例。 – akarnokd

+0

@akarnokd你能提供一個例子嗎? – matio

+0

https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#subscriber – akarnokd

回答

3

你也許應該使用使用subscribeWith

if (mDisposable != null && !mDisposable.isDisposed()) { 
    mDisposable.dispose(); 
} 

希望這有助於。

+0

從「io.reactivex.Observer」包可觀察到沒有方法subscribeOn() – matio

+0

Plz看到我的新更新 – matio

+0

有你試試我的建議? – Cochi