【问题标题】:Is my Retrofit custom callback a suitable implementation?我的 Retrofit 自定义回调是一个合适的实现吗?
【发布时间】: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


    【解决方案1】:

    不,你不应该将 LiveData 传递给 Callback,BaseCallback 应该是独立的,这是一个简单的示例:

    fun <T> baseCallBack(onSuccess: (response: T?) -> Unit, onFailure: (apiResult: ApiResult) -> Unit): Callback<T> {
        return object : Callback<T> {
            override fun onFailure(call: Call<T>, t: Throwable) {
    
            }
    
            override fun onResponse(call: Call<T>, response: Response<T>) {
                if (response.isSuccessful) {
                    onSuccess(response.body())
                } else {
                    onFailure(ApiResult.Error {
                        ApiError(message = t.message ?: "Oops Something Went Wrong!")
                    })
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-12-20
      • 2023-02-24
      • 2017-03-18
      • 2011-02-22
      • 1970-01-01
      • 1970-01-01
      • 2022-12-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多