android - LiveData 观察()未调用
问题描述
我的观察者回调没有被调用,你能指出我做错了什么吗?我的应用程序非常简单,因为我只是在测试这个架构
MainActivity 代码
viewModel = ViewModelProviders.of(this).get(UpcomingMoviesViewModel.class);
viewModel.getUpcomingMovies().observe(this, upcomingMovies -> {
// NOT CALLED !!!
for(UpcomingMovies movie : upcomingMovies) {
Log.d("Upcoming", "Movie - " + movie.movie.title);
}
});
视图模型代码
private LiveData<List<UpcomingMovies>> mUpcomingMovies;
private MovieRepository movieRepository;
public UpcomingMoviesViewModel(@NonNull Application application ) {
super(application);
movieRepository = MovieRepository.getsInstance(application);
}
public LiveData<List<UpcomingMovies>> getUpcomingMovies() {
mUpcomingMovies = movieRepository.getUpcomingMovies();
return mUpcomingMovies;
}
还有我的存储库方法
public LiveData<List<UpcomingMovies>> getUpcomingMovies(){
if(movieDao.loadUpcomingMovies().getValue() == null) {
webService.getUpcomingMovies(api_key).
enqueue(new Callback<MovieResults>() {
@Override
public void onResponse(Call<MovieResults> call, Response<MovieResults> response) {
MovieResults results = response.body();
if(results == null) return;
new insertAsyncTask(movieDao).execute(results.movies.toArray(new Movie[results.movies.size()]));
}
@Override
public void onFailure(Call<MovieResults> call, Throwable t) {
Log.d("Retrofit error", t.getMessage());
}
});
}
return movieDao.loadUpcomingMovies();
}
private static class insertAsyncTask extends AsyncTask<Movie, Void, Void> {
private final MovieDao mAsyncTask;
insertAsyncTask(MovieDao dao){
mAsyncTask = dao;
}
@Override
protected Void doInBackground(Movie... movies) {
long [] results = mAsyncTask.insertMovies(Arrays.asList(movies));
long [] results2 = mAsyncTask.insertUpcomingMovies(Arrays.asList(movies));
return null;
}
}
两者都results
返回results2
20 个数字,我将其归因于我收到 20 部电影这一事实。我在这里做错了什么?谢谢你的时间
解决方案
将 LifeCyclebserver 实施到 viewModel 并将其添加到您的活动中:
getLifecycle().addObserver(viewModel);
推荐阅读
- c# - ReadAsync 停止代码执行,不抛出异常,Task 仍在运行
- flutter - TextField 的 Flutter Cursor 在 setState 后移动到 Position 0
- java - 测试失败:java.lang.IllegalStateException:无法加载 ApplicationContext
- python-3.x - 用 Pandas 数据框中这两个数字的总和替换 + 符号
- typescript - Threejs Raycaster 在稍微超出对象时击中对象
- bouncycastle - 如何创建包含来自 PKCS12 的证书链的 .crt 存储文件?
- arrays - 无法将类型“[JSON]”的值分配给类型“[MyStruct]”
- sql - Postgres plpgsql 聚合函数过滤每个组的长度
- sas - 未排序数据上带有 BY 变量的 SAS 数据步骤
- flutter - 有没有办法使用另一个类的非静态方法?扑