2017-01-30 3 views
2

RxJava(特にRxJava2)を使い慣れていないので、比較的簡単な操作であるように見えます。私は、データベースからいくつかのデータを取得する必要があります(それは、リストとして表される)データを反復処理、各項目の操作を実行し、別のオブジェクトにデータをラップして戻ります。これは私が今までに持っているものです:RxJavaがリスト上で操作を実行してオブザーバブルを返す

問題は私のデータマネージャーが決して完了しないということです。基本的なデータが変更されるたびに、UIも変更されるという考えがありました。ただし、これらの呼び出しを完了することなく、toList()はイベントを送出しません。

答えて

0

RxJava 2のtoListは、Singleを返します。これは、正確に1つの項目を持つObservableに相当します。 .toObservableを追加してObservableに変換することはできますが、これは頻繁には必要ありません。

その他の変更については、whenever the underlying data changesとはどういう意味ですか?あなたのデータマネージャーはデータの変更についてあなたに通知しますか?

編集:あなたのmDataManager.getStuffList(id)呼び出しが複数のアイテムを発するObservableを返します(つまり、それが完了していないが、常に変更後に設定された最新のデータを発しない、である)、そして、あなたはこのような何かを行う必要がある場合:

mDataManager 
.getStuffList(id) 
.flatMap(listOfStuff -> 
    Observable 
    .from(listOfStuff) 
    .flatMap(item -> 
     mDataManager 
      .performCount(id, item.getTitle()) 
      .doOnNext(item::setCounter) 
      .takeLast(1) 
     .map(counter -> item) 
     .toList() 
    ) 
) 
... 
+0

はい、Android SQLiteヘルパクラスのRxラッパーである 'SqlBrite'を使用しています。これは、データがいつ変更されるかの通知を提供します。しかし、自分自身のコードを正しく理解すれば、toList()は最初の通知の後に通知を受け取ることを妨げますか?または私は何かを逃していますか?そしてはい、私はRxJava2を使っています – vkislicins

+0

'mDataManager.getStuffList'を複数回(データが変更されるたびに1回)呼び出す必要がある場合は、その周りにすべてをラップする必要があります。 OTOHの場合、 'getStuffList'呼び出しはデータベース内の項目が変更されたときにアイテムの完全なセットを返しますので、' flatMapIterable'をスキップしてそのflatMap内のすべてをネストする必要があります。 –

+0

あなたは後者の例を挙げることができますか?私はあなたが何を意味するか正確にはわからない – vkislicins

関連する問題