繁体   English   中英

retrofit2 errorbody.content无法访问

[英]retrofit2 errorbody.content is not accessible

我是Retrofit2世界的新手,目前我在从onNext获取errorbody时onNext

这是我的示例代码:

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

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

在此处输入图片说明

你可以试试:

String errorBody =  value.errorBody().string; 

要么

String errorBody =  value.errorBody().toString(); 

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

没有http错误代码,您将无法获得errorBody。 像这样使用smt:

if (!value.isSuccessful && value.errorBody() != null) {
    val errorBodyText = value.errorBody()?.string()?:""
    val errorResponse = Gson().fromJson<ErrorObject>(errorBodyText, ErrorObject::class.java)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM