2017-04-08 267 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