Retrofit2:如何在响应体内获取二进制文件

时间:2018-03-11 10:30:15

标签: java android retrofit2

我从一个Web服务获取数据,该服务在响应主体内部以二进制格式发送文件。我想获得二进制数据。 我不会在这里写整个日志,因为它太长了而且没有用,但我会写出前几行: PDF的第一行是:%PDF-1.4,其余的是二进制字符,如下所示:��Yi3y�H�w��L�A���mCvÆ��.��K��7����Z0�VP。所以它是响应体内的PDF文件。

这是我的代码:

@Streaming
@Headers({"Content-Type: application/json", "Accept: application/json"})
@POST("/auto/report/download")
Call<String> sendStatementDownloadRequest(@Body DepositStatementsDownloadRequest request);

这就是我所说的:

webservice.sendStatementDownloadRequest(request).enqueue(new Callback<String>() {
            @Override
            public void onResponse(Call<String> call, Response<String> response) {
                if (response.isSuccessful()) {
                    Log.i("VVV", "onResponse: " + new Gson().toJson(response));
                } else {

                }
            }

            @Override
            public void onFailure(Call<String> call, Throwable t) {

            }
        });

问题是它只得到第一行:%PDF-1.4并跳过其余的二进制数据。 无论如何都要有整个身体?

1 个答案:

答案 0 :(得分:1)

呼叫ResponseBody对象而不是String

你的电话应该是这样的

   @Streaming
   @Headers({"Content-Type: application/json", "Accept:     application/json"})
   @POST("/auto/report/download")
   Call<ResponseBody> sendStatementDownloadRequest(@Body   DepositStatementsDownloadRequest request);