2017-06-18 4 views
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のデータが変更されたが、何も起こりませんので、私はルームからリフレッシュコールを期待しています。

+0

'setMovies'は' notifyDataSetChanged() 'を呼び出しますか? – EpicPandaForce

+0

@EpicPandaForceはい。しかし、データがなくてもダウンロードが始まる前に一度だけ呼び出されます。ダウンロードが終了すると、再度呼び出されません。アプリを再起動すると、ダウンロードしたものが以前の実行から表示されます。 –

+0

両方の場所で同じ 'RoomDatabase'インスタンスを使用していますか?例えば、あなたの 'JobService'がUIコードとは別のプロセスにある場合、定義によって、それらは別々の' RoomDatabase'です。インスタンス。 – CommonsWare

答えて

関連する問題