【发布时间】:2020-05-22 09:39:00
【问题描述】:
我正在使用Retrofit 和RxJava 发出这样的网络请求:
我如何声明请求:
@POST("auth/profile/edit/")
fun updateProfile(@Body body: ProfileUpdateBody): Single<Response<Void>>
我怎么称呼:
api.updateProfile(**some data**)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe {
Log.d("----------", "Subscribed!")
}
.doOnSuccess {
if(it.isSuccessful)
Log.d("----------", "Success!")
else
Log.d("----------", "Not Successfull!")
}
.doOnError {
Log.d("----------", "Error Happened!")
}
.subscribe({
}, {
})
为了便于阅读,删除了一些代码。问题是即使我收到 401 或 400 状态的响应,doOnSuccess 也被调用。不应该在这里调用doOnError 吗?我很迷惑。
因此,我的 logact 显示“不成功”消息。当我收到 401 或 400 状态的响应时,如何确保调用 doOnErro?
或者我可以将传入的响应解析为Throwable 并调用doOnError() 函数吗?
【问题讨论】:
-
您是否尝试过简单地将
: Completable作为方法返回类型? -
@akarnokd 不,我没有。我应该吗?
-
如果我使用
Completable,如何判断响应是否成功? -
Completable有两个结果:完成或失败。所以doOnComplete而不是doOnSuccess。 -
Completable 可能不是 api 请求的正确运算符,我们可能对请求的响应感兴趣,而不仅仅是请求是否完成。单身是更好的选择。
标签: android parsing retrofit response rx-java2