android - 在应用程序端使用改造时无法向用户显示服务器端错误消息
问题描述
我的要求是显示服务器发送给最终用户的各种错误消息。
在服务器上编写的 API 是 RESTful 服务。
例如:
在服务器端,当用户输入错误的用户名/密码时,会生成 400 代码。
我尝试在应用程序端通过 Retrofit 执行在服务器端编写的 API。
当用户输入错误的用户名/密码时,服务器会生成 400 错误请求。
此时,只有onError()
方法被执行,而不是执行onNext()
方法。
如果onNext()
被执行,我将能够显示服务器端错误消息
解决方案
恐怕当您将 Retrofit 与 rxjava 集成时,它不是这样工作的。
当你得到一个不是 2XX 的响应代码时,Retrofit 会出错,导致onError
方法被调用。从那里,您需要从异常中获取响应错误正文。这是一种非常简单的方法:
public void onError(Throwable e){
if ( e instanceOf HttpException) {
HttpException error = (HttpException)e;
String errorBody = error.response().errorBody().string();
// now you can parse the error or simply show it
}
}
请注意,并非所有异常都需要HttpException
并且可能需要不同的处理。
推荐阅读
- spring-boot - 没有 JPA 的 Spring Boot Kotlin 分页
- python - 在 Python 中创建具有 % 重叠的样本数据(使用 faker)
- deep-learning - RuntimeError: 3 维权重 [64, 512, 1] 的预期 3 维输入,但得到了大小为 [4, 512] 的 2 维输入
- sql - 将数据插入临时表时排序。不起作用
- node.js - Promise.all 与 axios / node.js
- c# - 无法将项目排入抽象类中使用的 BlockingCollection
- c# - 包含另一个列表(项目、子项目)的构建列表
- javascript - 如何识别正在为动态添加的行编辑的行?
- tensorflow - 如何加载在 google colab 上训练的模型
- java - Spring Expression 语言 - 基于 url 映射值(基于没有主机和端口的路径)