【发布时间】:2019-04-25 20:44:25
【问题描述】:
我有这个类使用 livedata 进行请求调用...我想将这个类转换为 rxjava 类...因为我想在我的存储库/viewmodel 类上使用 rxjava...
有人可以帮我做这个吗?
abstract class NetworkOnlyResource<RequestType> {
private val result = MediatorLiveData<Resource<RequestType>>()
init {
result.value = Resource.loading(null)
fetchFromNetwork()
}
@MainThread
private fun setValue(newValue: Resource<RequestType>) {
if (result.value != newValue) {
result.value = newValue
}
}
private fun fetchFromNetwork() {
val apiResponse = createCall()
result.addSource(apiResponse) { response ->
result.removeSource(apiResponse)
when (response) {
is ApiSuccessResponse -> {
setValue(Resource.success(processResponse(response)))
}
is ApiEmptyResponse -> {
setValue(Resource.success(null))
}
is ApiErrorResponse -> {
onFetchFailed()
setValue(Resource.error(response.errorMessage, null))
}
}
}
}
protected open fun onFetchFailed() {}
fun asLiveData() = result as LiveData<Resource<RequestType>>
@WorkerThread
protected open fun processResponse(response: ApiSuccessResponse<RequestType>) = response.body
@MainThread
protected abstract fun createCall(): LiveData<ApiResponse<RequestType>>
}
【问题讨论】:
-
那么在 RxJava 中,它应该是什么?行为中继?
标签: android rx-java2 android-livedata