我正在玩rxJava2并获得
io.reactivex.exceptions.ProtocolViolationException: Disposable already set!
尝试将内容添加到CompositeDisposable后。运行应用程序后,我正在调用loadPost(),当我调用loadPostFromRemoteDataStore()时,应用程序崩溃。这是代码。
public class CountriesPresenterImpl extends MvpBasePresenter<CountriesView> implements CountriesPresenter {
@Inject AppRepository mAppRepository;
private final CompositeDisposable disposables = new CompositeDisposable();
private DisposableObserver observer = new DisposableObserver<List<Post>>() {
@Override
public void onNext(List<Post> posts) {
getView().setData(posts);
getView().showContent();
}
@Override
public void onError(Throwable e) {
getView().showError(e, false);
}
@Override
public void onComplete() {
}
};
@Override
public void attachView(CountriesView view) {
super.attachView(view);
App.getComponent().inject(this);
}
@Override
public void loadPost(boolean pullToRefresh) {
disposables.add( mAppRepository.getPost()
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.newThread())
.subscribeWith(observer) );
}
@Override
public void loadPostFromRemoteDatatore(boolean pullToRefresh) {
disposables.add( new AppRemoteDataStore().getPost()
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.newThread())
.subscribeWith(observer) );
}
@Override
public void detachView(boolean retainInstance) {
super.detachView(retainInstance);
if (!retainInstance) {
disposables.clear();
}
}
}
答案 0 :(得分:2)
确定,
我得到了答案:
与所有其他消费者一样,{@code DisposableCompletableObserver}只能订阅一次。
- 任何后续尝试将其订阅到新来源都会产生
- {@ link IllegalStateException},邮件为{@code&#34; Disposable已设置!&#34;}。
每次使用subscribeWith时都创建了一个DisposableObserver。
答案 1 :(得分:1)
您不能使用相同的DisposableObservable实例订阅两个不同的observable。请参阅文档here。