2017-02-25 31 views
0

MVVMパターンでRXJavaを学習しようとしています。私はリストを放出しているが、何とかそれは観察者のonNextイベントで捕まるされていないSearchViewModel.handleSearchTopic()を呼び出していますいくつかの検索イベントでRxAndroid - BehaviorSubjectがonNextで発光しない

:ここ

は私が実装しようとしているシナリオです。サブスクリプションも正常に行われています。私はいくつかの簡単な間違いをしていると思います。また、このユースケースを実装する上でより良い方法がありますか?

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の異なるインスタンスを使用していました。

関連する問題