Как утилизировать одноразовые в 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();
}