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
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)
}