我创建了retrofit2服务:
@POST("getTransactions/{page}")
Single<List<TransactionItem>> getTransactions(@Body TransactionRequest transactionRequest, @Path("page") int page);
尝试在我的Presenter中实现它:
private class TransactionsHandler implements SingleObserver<List<TransactionItem>> {
@Override
public void onSubscribe(Disposable d) {
callView(TransactionsFragment::showProgress);
}
@Override
public void onSuccess(List<TransactionItem> transactionItems) {
//update UI
}
@Override
public void onError(Throwable e) {
//show error on UI
}
}
但在onError
方法中,我只能获得Throwable
。
在后端,我实现自定义错误并将其返回给android。例如:
@Data
@AllArgsConstructor
private static class EmailException {
private String message;
}
return new ResponseEntity<>(new EmailException("Email not sended"), HttpStatus.INTERNAL_SERVER_ERROR);
但我无法从errorBody
获得此Throwable
。如何实现自定义错误。
答案 0 :(得分:2)
而不是这个
Single<List<TransactionItem>> getTransactions(@Body TransactionRequest transactionRequest, @Path("page") int page);
请声明如下:
Single<Response<List<TransactionItem>>> getTransactions(@Body TransactionRequest transactionRequest, @Path("page") int page);
此外,您需要更新观察者以实现SingleObserver<Response<List<TransactionItem>>>
。
请注意,即使响应包含错误,也只会调用onSuccess
方法。然后在onSuccess
中,您可以检查回复是否成功。
请查看Get response status code using Retrofit 2.0 and RxJava了解详情。