要求是将图像与纯文本一起上传,而普通数据整数的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转换为字节数组,但结果不是预期的。
还有其他可能吗?
答案 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有任何问题,所以我怀疑这是问题所在。