我正在尝试使用Android Paging library
和ViewModel
来实现Kotlin Coroutines
我有一个实现ViewModel
的{{1}}。它取决于CoroutineScope
:
Repository
这是我的class MovieListViewModel(
private val movieRepository: MovieRepository
) : ViewModel(), CoroutineScope {
private val job = Job()
override val coroutineContext: CoroutineContext
get() = job + Dispatchers.IO
private lateinit var _movies: LiveData<PagedList<MovieBrief>>
val movies: LiveData<PagedList<MovieBrief>>
get() = _movies
init {
launch {
_movies = LivePagedListBuilder(movieRepository.getMovies(), DATABASE_PER_PAGE)
.setBoundaryCallback(movieRepository.movieBoundaryCallback)
.build()
}
}
}
。我用Repository
Dependecy注入器注入了BoundaryCallback
。
Kodein
内部class MovieRepositoryImpl(
private val movieDao: MovieDao,
boundaryCallback: MovieBoundaryCallback
) : MovieRepository {
override suspend fun getMovies(): DataSource.Factory<Int, MovieBrief> {
return movieDao.getMovies()
}
override val movieBoundaryCallback = boundaryCallback
}
类BoundaryCallback
调用RESTAPI,然后将数据保存到Room数据库中(这两个都是挂起函数)。因此,我必须访问ViewModel的协程范围。实现此目的的最佳做法是什么?
谢谢
答案 0 :(得分:0)
分页库 版本3 现在可用,并支持Coroutine
。
PagedList.BoundaryCallback
现在为Deprecated
,在这种情况下,我们需要使用RemoteMediator
,它有一个suspend fun load
用于处理Remote+Local
分页