Retrofit エラー処理

投稿者:

RetrofitでのAPI処理 RxJava を利用している場合

Thank you for reading this post, don't forget to subscribe!


xxxxxRepository.removeMessage(param: params)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe { isLoading.postValue(true) }
.doFinally { isLoading.postValue(false) }
.subscribe({
    isRemoveMessageSuccess.postValue(true)
}, {
    // TODO: error handling
    Timber.d(it)
    if (it is HttpException) {
        val body = it.response()?.errorBody()?.string()
        if (!body.isNullOrEmpty()) {
                val response = JsonUtil.fromJson(body, Error::class.java)
            _errorMessage.value = response?.error?.message ?: ""
            }
        } else {
            _errorMessage.value = ""
        }
}).into(disposable)

エラー時に変数にエラー内容が入るようにしておく
// エラー
protected val _errorMessage = MutableLiveData()
val errorMessage: LiveData = _errorMessage

View側はこんな感じ
viewModel.errorMessage.observeNonNull(this) {
          context?.showErrorDialog(message = if (it.isNotEmpty()) it else getString(R.string.common_dialog_error_message))
          viewModel.clearErrorMessage()
          }
}

fun clearErrorMessage() {
          _errorMessage.postValue(null)
}