如何实现嵌套的直播数据?

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