2017-02-25 20 views
0

我想學習與MVVM模式的RXJava。RxAndroid - BehaviorSubject onNext

下面是場景我想實現:

在其發射名單,但不知它是沒有得到在觀察者的onNext事件陷入一些搜索事件我打電話SearchViewModel.handleSearchTopic()。訂閱也成功發生。我想我正在做一些簡單的錯誤,請指出。另外,有沒有更好的方法來實現這個用例?

SearchViewModel.java

private final BehaviorSubject<List<Topic>> topicList = BehaviorSubject.create(); 

public void handleSearchTopic() { 
    List<Topic> list = //getsomehow; 
    topicList.onNext(list); 
} 

public Observable<List<Topic>> getTopicListObservable() { 
    return topicList.asObservable(); 
} 

Fragment.java

@NonNull 
private CompositeSubscription subscription; 

@NonNull 
private SearchViewModel searchViewModel; 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    searchViewModel = new SearchViewModel(); 
    bind(); 
} 

@Override 
public void onDestroy() { 
    unBind(); 
    super.onDestroy(); 
} 

private void bind() { 
    subscription = new CompositeSubscription(); 

    subscription.add(searchViewModel.getTopicListObservable() 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(new Observer<List<Topic>>() { 
       @Override 
       public void onCompleted() { 
        //do something 
       } 

       @Override 
       public void onError(Throwable e) { 
        //do something 

       } 

       @Override 
       public void onNext(List<Topic> topics) { 
        //ideally this should be called when event is emitted but not getting called 

       } 
      })); 

} 

private void unBind() { 
    subscription.unsubscribe(); 
} 
+0

你確定調用過'topicList.onNext(list)'嗎? – tynn

+0

是的,它總是被調用。 – bpsingh

+0

嘗試記錄你的onError和onComplete,看看他們是否被調用。這可以幫助您找出錯誤。 –

回答

2

這是一個愚蠢的錯誤。我在片段和搜索事件中使用了SearchViewModel的不同實例。