首页 > 解决方案 > retrofit2 errorbody.content 不可访问

问题描述

我是 retrofit2 世界的新手,目前我在从onNext.

这是我的示例代码:

 public void onNext(Response<LoginResponse> value) {
      ResponseBody responseBody = value.errorBody();
      String sam = responseBody.toString();
 }

我的问题是,我无法获取 errorbody().content。就像它无法访问一样。

在此处输入图像描述

标签: androidretrofit2rx-java2rx-android

解决方案


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将是代表错误的错误类)


推荐阅读