使用Retrofit 2.0

时间:2016-04-13 02:40:45

标签: android retrofit2

我最近从使用Retrofit 1.9转到Retrofit 2,并且在发布二进制数据方面遇到了问题。

当我使用Retrofit 1.9时,我能够发送包含TypedByteArray数据的byte[]作为请求的@Body。与TypedByteArray最接近的等价似乎是RequestBody,我使用如下:

final ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream();
thumbnail.compress(Bitmap.CompressFormat.JPEG, 5, byteOutputStream);
final byte[] thumbnailBytes = byteOutputStream.toByteArray();
final RequestBody thumbnailRequestBody = RequestBody.create(MediaType.parse("image/jpeg"), thumbnailBytes);

生成请求的代码如下:

Headers("Content-Type: image/jpeg")
@POST("/thumbnail")
Call<Void> uploadThumbnail(@Body RequestBody thumbnailContent);

但是,似乎Retrofit可能会尝试将RequestBody解析为JSON对象,因为实际发送到服务器的数据是{}

有关如何正确发布二进制数据的任何建议或指导将不胜感激。感谢。

1 个答案:

答案 0 :(得分:1)

像这样创建您的请求

Headers("Content-Type: image/jpeg")
@POST("/thumbnail")
@Multipart
Call<Void> uploadThumbnail(@Part RequestBody thumbnailContent);

像这样称呼

File partFile = <your_stream_as_file>;
RequestBody fbody = RequestBody.create(MediaType.parse("image"), partFile);
uploadThumbnail(fbody);