Android jetpack组成观察实时数据

时间:2020-11-10 15:33:50

标签: android kotlin state android-mvvm android-jetpack-compose

我有一个关于使用的问题,我还有一个有关使用 observeAsState()来自动填充可组合列表视图的问题。

我的可编辑内容如下

@Composable
    fun getTopMovies() {
        val topMovies by movieListViewModel.getTopMovies().observeAsState()
        when (topMovies?.status) {
            Status.Error -> Text("error")
            Status.Loading -> {
                Log.d("JJJ", "Loading ")
                Text(text = "Loading")
            }
            Status.Success -> createMovieItemView(topMovies?.data?.results.orEmpty())
        }
    }

这使用MVVM进行网络调用以获取一些数据列表,并将其作为实时数据返回。

我遇到的问题是它似乎陷入了无限循环。如果我不使用observeeAsState,而只是使用正常的不可组合方式,即:

movieListViewModel.getTopMovies().observe(viewLifecycleOwner, Observer { ...}

它按预期方式工作,并且一旦从存储库/域层返回错误或成功,就会执行并结束。

这是下面的createMovieItemView:

    @Composable
    private fun createMovieItemView(movieList: List<MovieItem>) {
        LazyColumnFor(items = movieList, itemContent = { movieItem ->
            MovieListItem(MovieItemData(movieItem.posterPath.orEmpty(),
                    movieItem.title.orEmpty(),
                    movieItem.releaseDate.orEmpty(),
                    "some genra", ""), picasso)

        })
    } 

自动填充可组合列表视图。

我的可编辑内容如下

@Composable
    fun getTopMovies() {
        val topMovies by movieListViewModel.getTopMovies().observeAsState()
        when (topMovies?.status) {
            Status.Error -> Text("error")
            Status.Loading -> {
                Log.d("JJJ", "Loading ")
                Text(text = "Loading")
            }
            Status.Success -> createMovieItemView(topMovies?.data?.results.orEmpty())
        }
    }

这使用 MVVM 进行网络调用,以获取一些数据列表,并将其作为实时数据返回。

我遇到的问题是它似乎陷入了无限循环。如果我不使用watcheAsState,而只是使用正常的不可组合方式,即movieListViewModel.getTopMovies()。observe(viewLifecycleOwner,Observer {它会按预期工作,一旦从存储库/域层返回错误或成功,就会执行并结束。 / p>

0 个答案:

没有答案