問題タブ [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.

0 投票する
0 に答える
513 参照

java - ルーム データベースの変更時にオブザーバーがトリガーされない

ルーム データベースが変更されたときに RecyclerView を更新しようとしています。ただし、データベースへの変更が発生した場合、MainActivity で定義されたオブザーバーの onChanged メソッドは呼び出されません。DAO が List<> の代わりに LiveData を返すようにし、ViewModel で LiveData を使用すると、意図したとおりに動作します。ただし、実行時にクエリをデータベースに変更したいので、 MutableLiveData が必要です。

私のセットアップ:

MainActivity.java

BorrowedListViewModel.java

BorrowModelDao.java

AppDatabase.java

0 投票する
2 に答える
3232 参照

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 回クエリされるため、非常にコストのかかる操作に見えます。お知らせ下さい 。ありがとう !