如何实现嵌套的直播数据?
How to implement nested live data?
如何在 android 中实现嵌套实时数据:我需要将 serverMovies 传递给第二级实时数据
这可能吗?
activityViewModel.getAllMovies().observe(this, new Observer<List<Movie>>() {
@Override
public void onChanged(List<Movie> serverMovies) {
Log.d("",serverMovies+"");
activityViewModel.insertMoviesIntoLocalDatabase(serverMovies).observe(this, new Observer<List<Movie>>() {
@Override
public void onChanged(@Nullable List<Movie> movies) {
Log.d("",movies+"");
/*contactArrayList.clear();
contactArrayList.addAll(contacts);
contactsAdapter.notifyDataSetChanged();*/
}
});
}
});
您需要添加一个 Mediator Live Data 来响应电影实时数据的变化。
像这样,
LiveData<List<Movies>> moviesLiveData = getAllMovies();
MediatorLiveData mediatorLiveData = new MediatorLiveData<>();
mediatorLiveData.addSource(moviesLiveData, value -> mediatorLiveData.setValue(value));
所以当原始直播数据的值发生变化时,中介直播数据的值也会发生变化,那么您可以随意观察它。
我也可以使用 switchmap
:
Transformations.switchMap(
activityViewModel.getAllMovies(), (x) ->
activityViewModel.insertMoviesIntoLocalDatabase(x))
.observe(this, movies ->
movieAdapter.setData(new ArrayList<>(movies))
);
如何在 android 中实现嵌套实时数据:我需要将 serverMovies 传递给第二级实时数据
这可能吗?
activityViewModel.getAllMovies().observe(this, new Observer<List<Movie>>() {
@Override
public void onChanged(List<Movie> serverMovies) {
Log.d("",serverMovies+"");
activityViewModel.insertMoviesIntoLocalDatabase(serverMovies).observe(this, new Observer<List<Movie>>() {
@Override
public void onChanged(@Nullable List<Movie> movies) {
Log.d("",movies+"");
/*contactArrayList.clear();
contactArrayList.addAll(contacts);
contactsAdapter.notifyDataSetChanged();*/
}
});
}
});
您需要添加一个 Mediator Live Data 来响应电影实时数据的变化。
像这样,
LiveData<List<Movies>> moviesLiveData = getAllMovies();
MediatorLiveData mediatorLiveData = new MediatorLiveData<>();
mediatorLiveData.addSource(moviesLiveData, value -> mediatorLiveData.setValue(value));
所以当原始直播数据的值发生变化时,中介直播数据的值也会发生变化,那么您可以随意观察它。
我也可以使用 switchmap
:
Transformations.switchMap(
activityViewModel.getAllMovies(), (x) ->
activityViewModel.insertMoviesIntoLocalDatabase(x))
.observe(this, movies ->
movieAdapter.setData(new ArrayList<>(movies))
);