在 200 网络响应上调用 onError 而不是 onNext - RxJava,Retrofit
Posted
技术标签:
【中文标题】在 200 网络响应上调用 onError 而不是 onNext - RxJava,Retrofit【英文标题】:onError is called instead of onNext on 200 network response - RxJava, Retrofit 【发布时间】:2020-02-15 07:29:48 【问题描述】:正如标题中提到的,当请求以 200 响应时,不会调用 onNext。它会触发 onError。 LogCat 不显示任何错误。我也确信 HTTP 请求会以 200 响应。
这是我的服务接口
interface EnrollmentService
@POST("enrollment/precheck")
fun sendPhoneNumber(@Body phoneInput: PhoneInputRequest) : Observable<Void>
存储库
class EnrollmentRepository(api : Retrofit) : BaseRepository(api)
private val service = api.create(EnrollmentService::class.java)
fun sendPhoneNumber(phoneInputRequest: PhoneInputRequest) = service.sendPhoneNumber(phoneInputRequest)
这是 ViewModel 中触发请求的方法:
fun sendPhoneNumber(phoneNumber: String)
if(!isNetworkAvailable(phoneInputResponse))
return
compositeDisposable.add(repository.sendPhoneNumber(PhoneInputRequest(PhoneNumber("+48", phoneNumber)))
.subscribeOn(Schedulers.io())
.observeOn(androidSchedulers.mainThread())
.subscribe(
phoneInputResponse.postValue(Event(ApiResponse.success(null))),
error -> phoneInputResponse.postValue(Event(ApiResponse.error(ResponseError.getErrorType(error))))
))
【问题讨论】:
那么错误是什么? @akarnokd 它是 NullPointerException。 200 响应的正文为空。会不会是这个问题? 您的回复类型无效。您必须将 Void 更改为响应的对象。fun sendPhoneNumber(@Body phoneInput: PhoneInputRequest) : Observable<Any or Your Response Object Class>
您是否尝试使用Observable<Unit>
而不是Observable<Void>
?
Observable如果您只是期待 response.code()
将 sendPhoneNumber
方法的 return type
从 Observable<Void>
更改为 Observable<Response<Void>>
所以,使用:-
fun sendPhoneNumber(@Body phoneInput: PhoneInputRequest) : Observable<Response<Void>>
【讨论】:
以上是关于在 200 网络响应上调用 onError 而不是 onNext - RxJava,Retrofit的主要内容,如果未能解决你的问题,请参考以下文章
Safari 扩展:WebSocket 连接失败调用 onclose 而不是 onerror 并且没有异常
JavaScript img.src onerror 事件 - 获取错误原因