1
:ルームはUIにデータが変更されたことをどのように通知しますか?私はこのクエリを持って
@Query("SELECT * FROM Movie")
LiveData<List<Movie>> getAll();
は、これは私のViewModelです:
public class MainActivityViewModel extends ViewModel {
@Inject AppDatabase db;
private LiveData<List<Movie>> data;
public MainActivityViewModel() {
MovieApp.graph().inject(this);
data = db.movieDao().getAll();
}
LiveData<List<Movie>> getData() {
return data;
}
}
そして、私の活動ののonCreateに私が呼ん:JobServiceで
viewModel.getData().observe(this, adapter::setMovies);
私はJSONをダウンロードし、 Roomオブジェクトに変換して
db.movieDao().insertAll(movies.results);
が、何も
が、私は自動的に私のためにルーム手動で更新したり、意志ルームにそれをトリガーする必要がありますか:-(どうなりますか?私は何かが恋しいですか?
編集:
私は、これがこの順で、これまで何が起こるかである、いくつかのログアウトを追加しました:
MainActivityViewModel
が作成され、db.movieDao().getAll()
- 活動を呼び出しViewModelに
viewModel.getData().observe(this, adapter::setMovies)
setMovies
と呼ばれる観察0データ付き- カップリング秒のeは後でJobServiceは、負荷データを開始し、この時点で
db.movieDao().insertAll(movies.results)
を呼び出したDBのデータが変更されたが、何も起こりませんので、私はルームからリフレッシュコールを期待しています。
'setMovies'は' notifyDataSetChanged() 'を呼び出しますか? – EpicPandaForce
@EpicPandaForceはい。しかし、データがなくてもダウンロードが始まる前に一度だけ呼び出されます。ダウンロードが終了すると、再度呼び出されません。アプリを再起動すると、ダウンロードしたものが以前の実行から表示されます。 –
両方の場所で同じ 'RoomDatabase'インスタンスを使用していますか?例えば、あなたの 'JobService'がUIコードとは別のプロセスにある場合、定義によって、それらは別々の' RoomDatabase'です。インスタンス。 – CommonsWare