改造 - 将整数arraylist与图像文件相结合

时间:2017-03-07 11:03:44

标签: android retrofit2

要求是将图像与纯文本一起上传,而普通数据整数的Arraylist 。 我正在使用@PartMap作为普通数据

对于图像部分,这里是我的代码

imageFile = new File(imagePath);
imageBody = RequestBody.create(MediaType.parse("image/*"), imageFile);
multipartImageBody = MultipartBody.Part.createFormData("file_name", imageFile.getName(), imageBody);

对于普通数据

userIdBody = RequestBody.create(MediaType.parse("text/plain"), userId);
customerTypeBody = RequestBody.create(MediaType.parse("text/plain"), typeOfCustomer);

合并普通数据

HashMap<String, RequestBody> partMap = new HashMap<>();
partMap.put("userId", userIdBody);
partMap.put("customer_type", customerTypeBody);

请求

@POST<T> methodName(@PartMap Map<String, RequestBody> params, @Part MultipartBody.Part imageParam);

如果我尝试将整数listarray添加为Requestbody,则会出现问题,数据将转换为服务器无法解析的字符串,而不是我们应该从应用程序端本身发送正确的数据

我尝试了什么

RequestBody.create(Mediatype,byte[])

Requestbody有这个方法接受我们的数据作为字节数组,我将arraylist转换为字节数组,但结果不是预期的。

还有其他可能吗?

2 个答案:

答案 0 :(得分:0)

使用它就像这是界面部分

@Multipart
@POST("your/link")
Call<SuccessMessage> yourMethod(@Part MultipartBody.Part image,
                                                          @Part MultipartBody.Part[] data);//here you can use partmap also

以及如何使用

  MultipartBody.Part img = RequestHelper.multiPartBobyPart(image, "image");


    MultipartBody.Part[] parts = new MultipartBody.Part[size];
        for (int i = 0; i < size; i++) {
            parts[i] = RequestHelper.multiPartBobyPart(yourStringArrayList.get(i), "var[]");
        }
    Call<SuccessMessage> call = mNetworkInterface.applyForDomesticJob(img, parts);
    call.enqueue(this);

这是请求助手类

public final class RequestHelper {

public static MultipartBody.Part multiPartBobyPart(java.io.File file, String parameterName) {
    return MultipartBody.Part.createFormData(parameterName, file == null ? "noFile" : file.getName(),
            RequestBody.create(MediaType.parse("multipart/form-data"), file == null ? new java.io.File("") : file));
}

public static RequestBody getRequestBody(String parameter) {
    return RequestBody.create(MediaType.parse("multipart/form-data"), parameter);
}


public static MultipartBody.Part multiPartBobyPart(String data, String parameterName) {
    return MultipartBody.Part.createFormData(parameterName, data);
}

}

使用this link获取更多详细信息

答案 1 :(得分:0)

int[]转换为byte[]听起来像是字典问题。您应该检查服务器接受数据的字节顺序,并查看您的转换代码是否使用相同的字节顺序。您可以使用ByteBuffer进行转换,它使用order()方法指定字节顺序。

我自己没有与改造 RequestBody.create有任何问题,所以我怀疑这是问题所在。