、私はこの方法でRxJavaを使用することが最善の策であるとは思いません。あなたの主な問題は、あなたがトランザクションに参加していないことで、データが矛盾した状態になる危険があります。 「このコードをRxスタイルで書くにはどうしたらよいですか?私は、このプロセスのあらゆる段階でそれを使用することはあなたに何も得られないことを提案します。したがって、私はGreenDaoトランザクションの内部に手続き型(Rxではなく)コードを記述し、RxJavaを使用して完了したときに通知することをお勧めします。 GreenDaoトランザクションブロックの内部にいる場合、その内部のすべてのデータベース呼び出しは、保証された順序で次々に同期して行われます。
さらに、一貫性を最大限にするために、トランザクションブロックがコミットされた後でのみ、すべてのファイルを一度に削除します(DBトランザクションの一部が失敗し、データベースが失敗した場合、 t更新)。さらに、GreenDaoで削除を実行する主な方法は、直接、session.delete(entity)
とクエリquery.buildDelete().tableDeleteQuery.executeDeleteWithoutDetachingEntities()
の2つです。直接削除はコード作成がはるかに簡単ですが、膨大な量のデータがある場合は遅くなる可能性があります。 1000個未満の非常に単純なエンティティがある場合は、直接削除で十分でしょう。 したがって、コードは次のようになります。
Thx、doAfterNext?それはdoOnNextかdoAfterTerminateですか?私はrxjava 1.xを使用しています – liang
DoAfterNextはonNextの後に実行されます(ここでは講義を削除しています)。 – lomg