如何实现嵌套实时数据?

时间:2019-07-13 14:59:51

标签: android mvvm android-architecture-components android-livedata android-jetpack

如何在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();*/

                        }
                    });
                }


     });

2 个答案:

答案 0 :(得分:1)

我也可以使用switchmap

Transformations.switchMap(
      activityViewModel.getAllMovies(), (x) ->
      activityViewModel.insertMoviesIntoLocalDatabase(x))
      .observe(this, movies ->
       movieAdapter.setData(new ArrayList<>(movies))
 );

答案 1 :(得分:0)

您需要添加一个Mediator Live Data来响应电影实时数据中的变化。

类似这样的

LiveData<List<Movies>> moviesLiveData = getAllMovies();
MediatorLiveData mediatorLiveData = new MediatorLiveData<>();
mediatorLiveData.addSource(moviesLiveData, value -> mediatorLiveData.setValue(value));

因此,当原始实时数据的值更改时,调解器实时数据的值也更改了,那么您可以随时观察它。