android - retrofit2 errorbody.content 不可访问
问题描述
我是 retrofit2 世界的新手,目前我在从onNext
.
这是我的示例代码:
public void onNext(Response<LoginResponse> value) {
ResponseBody responseBody = value.errorBody();
String sam = responseBody.toString();
}
我的问题是,我无法获取 errorbody().content。就像它无法访问一样。
解决方案
Retrofit 的错误主体是 OkHttp3 类型的ResponseBody
。这个类是抽象的,它的实现定义了内容在内部表示的不同方式。
您可以通过多种方式获取内容。您可以将它bytes
作为字符串输入,甚至可以获取它 -在这里InputStream
查看它们。
我想一个简单的方法是使用string()
:
value.errorBody().string();
请注意,这些方法通常从缓冲区读取响应,这意味着如果我没记错的话,再次调用string()
不会再次给您响应的内容。特别是,string()
还会将整个正文读入内存,这可能会导致内存不足异常。
获得内容后,如果您希望将其作为数据模型中的对象,则必须手动对其进行反序列化。有很多方法可以做到这一点,在网上很容易找到,但为了完整起见,这里有一种方法gson
:
String error = value.errorBody().string();
MyPojo pojo = new Gson().fromJson(error, MyPojo.class);
(这MyPojo
将是代表错误的错误类)
推荐阅读
- r - 如何将数字序列转换为列
- java - 对于带有 ArrayList 的每个循环
- css - 如何使用实用程序优先方法(例如引导程序)使用 STATIC HTML 创建动态布局
- java - 如何传递一个接受浮点数并将浮点数返回给另一个函数的函数?
- python - Django过滤器选择字段显示正确的值但不会过滤
- docker - Kubernetes Persistent Volume Claims 创建一个新的 Persistent Volume,而不是绑定到可用的 Persistent Volume
- swift - SwiftUI:如何从核心数据中的 TextField 中保存值
- python - 如何实现有效的算法来计算大型数据集的多个不同值?
- php - 传递密钥并在函数内部使用数组
- python - 估计器管道的无效参数 rf