Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法使用LiveData和Room更新UI_Java_Android_Android Room_Android Livedata - Fatal编程技术网

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;}