問題タブ [android-viewmodel]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - ルーム データベースの変更時にオブザーバーがトリガーされない
ルーム データベースが変更されたときに RecyclerView を更新しようとしています。ただし、データベースへの変更が発生した場合、MainActivity で定義されたオブザーバーの onChanged メソッドは呼び出されません。DAO が List<> の代わりに LiveData を返すようにし、ViewModel で LiveData を使用すると、意図したとおりに動作します。ただし、実行時にクエリをデータベースに変更したいので、 MutableLiveData が必要です。
私のセットアップ:
MainActivity.java
BorrowedListViewModel.java
BorrowModelDao.java
AppDatabase.java
android - Room に LiveData がなく、代わりに REST API から取得する場合に LiveData を返すリポジトリ
LiveData 処理に関する以下のユース ケースの処理に関する推奨事項を探しています。ViewModel は、LiveData のリポジトリを呼び出します (製品カタログなど)。リポジトリは最初に LocalDataSource(Room) からチェックしますが、データが利用できない場合は、RemoteDataSource(REST API) を呼び出します。
質問:
1) 以下の ygit からのコメントのとおり、リポジトリは、オブザーバーとしてサブスクライブするまで、Room で LiveData の可用性ステータスを取得できません。したがって、データが利用可能な場合でも、応答で null が返されます。 「LiveData はデータを監視し、それをオブザーバーに配布します。アクティブなオブザーバーが追加されるまで値を計算しません。」
リポジトリはデータ ソースをクライアントに隠しているため、Room をチェックインしてリモート ソースから取得するのはリポジトリの役割です。Room でデータの可用性を確認するにはどうすればよいですか?
2) RemoteDataSource によって返されるデータは LiveData タイプではないため、リポジトリが最終的に LiveData を ViewModel に返すようにするにはどうすればよいですか?
リポジトリは最初に (RemoteDataSource から) データをまず Room に挿入し、次に Room をクエリして LiveData を返す必要がありますか? プロセスで Room が 2 回クエリされるため、非常にコストのかかる操作に見えます。お知らせ下さい 。ありがとう !