【发布时间】:2020-03-20 04:32:55
【问题描述】:
在这里,我将可变 livedata 对象作为侦听器传递。它有效,但这是一个正确的实现吗?此实现是否存在任何隐藏问题或有更好的解决方案?
BaseCallback.kt
abstract class BaseCallback<T> constructor(private val listener: MutableLiveData<*>) : Callback<T> {
override fun onResponse(call: Call<T>, response: Response<T>) {
when {
response.code() == 401 -> {
}
response.isSuccessful -> {
onSuccess(response.body())
}
else -> {
val apiError = ErrorUtils.parseError(response)
listener.value = ApiResult.Error(exception = apiError!!)
}
}
}
override fun onFailure(call: Call<T>, t: Throwable) {
listener.value = ApiResult.Error(
ApiError(message = t.message ?: "Oops Something Went Wrong!")
)
}
abstract fun onSuccess(response: T?)
}
视图模型
private val _deviceListResponse = MutableLiveData<ApiResult<List<Device>>>()
val deviceListResponse: LiveData<ApiResult<List<Device>>> = _deviceListResponse
deviceRepo.getDevices().enqueue(object : BaseCallback<List<Device>>(_deviceListResponse) {
override fun onSuccess(response: List<Device>?) {
val devices = response ?: ArrayList()
_deviceListResponse.value = ApiResult.Success(devices)
}
})
【问题讨论】:
标签: android kotlin retrofit2 android-livedata mutablelivedata