2017-05-02 49 views
0

mSafeObserver.isDisposed();以下的代码中,如果没有调用isDatabaseEmpty == falsezipped.subscribe(mSafeObserver);),总是返回空指针异常。如何在Android上处理RxJava 2.0中的Disposable?

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(); 
} 

如何检查,如果我能一次性处置?

回答

0

我不知道是什么拉链指但这怎么我会做

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(); 
}