2017-01-28 7 views
2

私はRxJavaを新しくしました。filter()のすべての文字列はArrayで、RecyclerViewを更新するためにフィルタリングされた文字列を持つ新しい配列からです。Observableの排出量を合わせる

は、私が試した:suggestionsArrayは私が最初に持っているとあなたが見ることができるように私は、アダプタが、何私を特定の文字列が含まれているだけでこれらの文字列をフィルタリングして、更新するfilter()を使用して文字列の配列がある

  Observable.from(suggestionsArray) 
      .filter(new Func1<String, Boolean>() { 
       @Override 
       public Boolean call(String item) { 
        return item.contains(usersTextEntered); 
       } 
      }) 
      .subscribe(new Action1<String>() { 
       @Override 
       public void call(String i) { 
        adapter.addItem(i); 
       } 
      }); 

    adapter.notifyDataSetChanged(); 

をgetはConcurrentModificationExceptionで、これは私が推測しているのは、フィルタの各項目が順番に来るので、に入る前にすべての排出をcombineにする必要があると思うからです。

私はオペレータのためにwikiを検索しましたが、私が見つけたすべてのもの(merge/combine/zipなど)は2つの異なるものとしていますObservables私は排出量を組み合わせるために何かを探すべきだと推測していますが、それを検索する方法を確認してください。

答えて

1

。しかし、すべての項目に参加することについてのあなたの質問に答えるには、toList()演算子で行うことができます。これは、onComplete呼び出しを待機し、すべての項目をListの形式で1つのイベントとして送出します。

0

事は、ConcurrentModificationExceptionはどこから来たのですか?リスト?アダプター?

後者の場合は、常にメインスレッドに延期することができます:例外のソース(すなわち、スタックトレース)がある場所を指定するまで、そのだけで推測

 Observable 
    .from(suggestionsArray) 
    .filter(item -> item.contains(usersTextEntered)) 
    .subscribeOn(AndroidSchedulers.mainThread()) 
    .subscribe(adapter::addItem, err ->{}, adapter::notifyDataSetChanged); 
関連する問題