0

在下面的代码中,如果(未被调用)mSafeObserver.isDisposed();总是返回空指针异常。isDatabaseEmpty == falsezipped.subscribe(mSafeObserver);

private SafeObserver<ResponseHelper> mSafeObserver; 

private Observer<ResponseHelper> observer = new Observer<ResponseHelper>() {
    // ...
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mSafeObserver = new SafeObserver<>(observer);
}

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    // ...        
    if (isDatabaseEmpty) {
        zipped.subscribe(mSafeObserver);
    } else {
        initRecycler();
    }
}

@Override
public void onDestroy() {
    super.onDestroy();
    if (mSafeObserver != null && !mSafeObserver.isDisposed()) 
        mSafeObserver.dispose();
}

在 rxJava 1.0 中,这段代码是正确的:

@Override
protected void onDestroy() {
    super.onDestroy();
    if (mSubscription != null && !mSubscription.isUnsubscribed()) 
        mSubscription.unsubscribe();
}

如何检查我是否可以处置 Disposable?

4

1 回答 1

0

我不知道zipped指的是什么,但我会这样做

private CompositeDisposable mDisposable = new CompositeDisposable();
private Observer<ResponseHelper> observer = 
new Observer<ResponseHelper>() {
    // ...
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mSafeObserver = new SafeObserver<>(observer);
}

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    // ...        
    if (isDatabaseEmpty) {
        zipped
            .doOnSubscribe(mDisposable::add)
            .subscribe(mSafeObserver);
    } else {
        initRecycler();
    }
}

@Override
public void onDestroy() {
    super.onDestroy();
    mDisposable.dispose();
}
于 2017-07-19T19:16:07.823 回答