Java 无法使用LiveData和Room更新UI
我正在使用Java 无法使用LiveData和Room更新UI,java,android,android-room,android-livedata,Java,Android,Android Room,Android Livedata,我正在使用Room和LiveData写入和读取本地SQLite数据库。我已成功读取和写入数据库,因为我正在使用Stetho进行确认 我了解LiveData在单独的线程上处理功能。我正在努力根据使用LiveData检索的数据库信息更新我的RecyclerView: private void retrieveTasks() { final LiveData<List<Movie>> movies = mDb.movieDao().loadAllMovies()
Room
和LiveData
写入和读取本地SQLite数据库。我已成功读取和写入数据库,因为我正在使用Stetho
进行确认
我了解LiveData
在单独的线程上处理功能。我正在努力根据使用LiveData
检索的数据库信息更新我的RecyclerView
:
private void retrieveTasks() {
final LiveData<List<Movie>> movies = mDb.movieDao().loadAllMovies();
movies.observe(this, new Observer<List<Movie>>() {
@Override
public void onChanged(@Nullable List<Movie> movies) {
for (Movie movie : movies) {
String photoURL = "http://image.tmdb.org/t/p/w185" + movie.getPoster_path();
Log.v("FAVORITE_URL", photoURL);
mMovieURLS.add(photoURL);
}
runOnUiThread(new Runnable() {
@Override
public void run() {
mMovieResultsAdapter.swapDataSet(mMovieURLS);
mMovieResultsAdapter.notifyDataSetChanged();
}
});
}
});
}
private void retrieveTasks(){
final LiveData movies=mDb.movieDao().loadAllMovies();
电影。观察(这个,新观察者){
@凌驾
更改后的公共void(@Nullable List movies){
用于(电影:电影){
字符串photoURL=”http://image.tmdb.org/t/p/w185“+movie.getPoster_path();
Log.v(“收藏夹URL”,photoURL);
mmovieurl.add(photoURL);
}
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
mMovieResultsAdapter.swapDataSet(mMovieURLS);
mMovieResultsAdapter.notifyDataSetChanged();
}
});
}
});
}
onChanged()
将在主应用程序线程上调用;您不需要runOnUiThread()
。除此之外,您所说的“我正在努力根据使用LiveData检索的数据库信息更新我的RecyclerView”到底是什么意思?你有编译错误吗?您是否遇到运行时错误?正在调用onChanged()
方法吗?@commonware onChanged正在被调用,因为我在那里有一个日志,所以我可以验证;RecyclerView只是没有更新。这可能与线程无关。您还需要查看哪些其他代码?我可以发布,也可以发布:您的swapDataSet()
实现中可能存在问题。您可能会一步一步地浏览这些代码,看看发生了什么。有趣的是,它在我的RecyclerView适配器中,我只需更改数据集。我想知道,由于它在适配器类中,是否会导致问题:public void swapDataSet(ArrayList-dataset){mMovieURLS=dataset;}