簡體   English   中英

我的 Retrofit 自定義回調是合適的實現嗎?

[英]Is my Retrofit custom callback a suitable implementation?

在這里,我將可變的 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)
        }
    })

不,您不應該將 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!")
                })
            }
        }
    }
}

暫無
暫無

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

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