【发布时间】: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
是问题所在。 API 发生了变化,一旦我添加了响应对象,它就起作用了。我没有尝试过,但我认为 Unit 或 Any 可以解决以前的问题。
标签: android kotlin retrofit rx-java