Как утилизировать одноразовые в RxJava 2.0 на Android?

В коде ниже mSafeObserver.isDisposed(); всегда возвращать исключение нулевого указателя, если isDatabaseEmpty == false (zipped.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();
}

Как проверить, могу ли я утилизировать одноразовые?

1 ответ

Я не знаю, что относится к молнии, но вот как бы я это сделал

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();
}
Другие вопросы по тегам