簡體   English   中英

CoroutineScope 的邊界回調(Android Paging 庫)

[英]Boundary Callback (Android Paging Library) with CoroutineScope

我正在嘗試使用ViewModelKotlin Coroutines實現Android Paging library

我有一個實現CoroutineScopeViewModel 這取決於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 我使用Kodein Dependecy Injector 注入BoundaryCallback

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類內部onItemAtEndLoaded調用 RESTAPI,然后將數據保存到 Room 數據庫(兩者都是掛起函數)。 所以我必須訪問我的 ViewModel 的協程范圍。 實現這一目標的最佳做法是什么?

謝謝

Paging 庫版本 3現已可用並支持Coroutine PagedList.BoundaryCallback現已Deprecated ,對於這種情況,我們需要使用RemoteMediator ,它有一個suspend fun load來處理Remote+Local分頁

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM