如何解决从Rx到协程的分页数据源
我想使用Coroutine
进行分页功能,我已经在loadInitial()
和loadAfter()
中使用了协程。但是问题是如何将retry()
,setRetry()
和setRetry(Action { loadAfter(params,callback) })
从Rx
更改为Coroutine
?
import androidx.lifecycle.MutableLiveData
import androidx.paging.PageKeyedDataSource
import io.reactivex.Completable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.CompositeDisposable
import io.reactivex.functions.Action
import io.reactivex.schedulers.Schedulers
class NewsDataSource(
private val networkService: NetworkService,private val compositeDisposable: CompositeDisposable)
: PageKeyedDataSource<Int,News>() {
var state: MutableLiveData<State> = MutableLiveData()
private var retryCompletable: Completable? = null
private val job = Job()
private val scope = CoroutineScope(IO + job)
override fun loadInitial(params: LoadInitialParams<Int>,callback: LoadInitialCallback<Int,News>) {
scope.launch {
try {
.....
}catch (exception : Exception){
.....
}
}
}
override fun loadAfter(params: LoadParams<Int>,callback: LoadCallback<Int,News>) {
scope.launch {
try {
.....
}catch (exception : Exception){
.....
setRetry(Action { loadAfter(params,callback) }) // How to change this function from Rx to Coroutine
}
}
}
override fun loadBefore(params: LoadParams<Int>,News>) {}
fun retry() { // How to change this function from Rx to Coroutine
if (retryCompletable != null) {
compositeDisposable.add(retryCompletable!!
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe())
}
}
private fun setRetry(action: Action?) { // How to change this function from Rx to Coroutine
retryCompletable = if (action == null) null else Completable.fromAction(action)
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。