当前位置: 首页 > 知识库问答 >
问题:

改装2.0b2:如何从响应中获取InputStream?

楚举
2023-03-14

我使用的是改装版2.0b2。收到响应后,我尝试通过以下方式从响应中获取InputStream:

Response<JsonNode> response = call.execute();
InputStream is = response.raw().body().byteStream();

但是这个应用程序一直在扔:

java.lang.IllegalStateException: Cannot read raw response body of a converted body.
        at retrofit.OkHttpCall$NoContentResponseBody.source(OkHttpCall.java:184)
        at com.squareup.okhttp.ResponseBody.byteStream(ResponseBody.java:43)
        at ...

尽管回复正确。我到底做错了什么?

共有1个答案

濮赤岩
2023-03-14

如果您想要原始流,请告诉改造返回一个OkHttpresponsebook

import okhttp3.ResponseBody;
import retrofit2.Response;

Response<ResponseBody> response = call.execute();
try ( ResponseBody responseBody = response.body() ) {
    InputStream is = responseBody.byteStream();
    // ...
}

记住也要更新你的界面。

由于响应主体由有限的资源支持,因此使用后必须关闭responseBody对象。因此,上面的代码使用了try with resources语句。

 类似资料:
  • 问题内容: 我在同一个域上有一个请求,我想读取cookie。它不断返回。 有任何想法吗?我为此使用Chrome。 问题答案: 您正在寻找的响应标头: 它不适用于HTTPOnly cookie。 更新资料 根据XMLHttpRequest级别1和XMLHttpRequest级别2,此特定的响应标头属于您可以使用所获得的“禁止”响应标头,因此,该方法可以起作用的唯一原因基本上是一个“顽皮的”浏览器。

  • 我想通过改型从get api获得响应,但我不知道如何检查,因此在给定完整代码和api响应的下面显示空响应, 我的回应是: 我的接口类: POJO: 下面是MainActivity类中的调用方法: 上面给出了完整的代码,但它显示空响应,因为我不知道如何检查和改装中的数据数组对象。 所以请谁能解释一下如何在改装中检查它。 谢谢。

  • 我无法从类似200201的响应中获取成功响应状态代码。。我们可以很容易地从类中获得错误代码,比如和。是否有获取状态代码的解决方法?

  • 问题内容: 我正在尝试从Web读取JSON数据,但是该代码返回空结果。我不确定我在做什么错。 问题答案: 理想的方法 不是 使用,而是直接在阅读器上使用解码器。这是一个不错的函数,它获取url并将其响应解码到结构上。 使用示例: 您不应该在生产中使用默认结构,如最初回答的那样!(/ etc调用的是哪个)。原因是默认客户端没有设置超时。如果远程服务器无响应,那将是糟糕的一天。

  • 我可以很容易地得到消息,但我不能从响应中得到“他”数组。 下面是我的数据模型类 这就是我向服务器发送请求的方式: