Room如何通知UI数据已更改?

时间:2017-06-18 11:14:12

标签: java android android-room

我有这个问题:

@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 of my Activity中,我打电话给:

viewModel.getData().observe(this, adapter::setMovies);

JobService我下载了一个Json并将其转换为Room个对象并调用

db.movieDao().insertAll(movies.results);

但没有任何反应: - (

我是否必须手动触发房间刷新或自动为我设置房间?我想念一下吗?

修改

我添加了一些注销,这是到目前为止按顺序发生的事情:

  • MainActivityViewModel已创建并致电db.movieDao().getAll()
  • 活动观察ViewModel viewModel.getData().observe(this, adapter::setMovies)
  • setMovies使用0数据
  • 调用
  • 几秒钟后,JobService已启动,加载数据并调用db.movieDao().insertAll(movies.results)

此时我希望来自Room的刷新调用,因为数据库数据已经改变但没有任何反应。

1 个答案:

答案 0 :(得分:0)

问题是我的应用创建了两个Room实例,因为我忘记了@Singleton annotation in my Dagger module