我需要上传具有2个参数的JSONObject =第一个是已经生成的约会密钥(一种类型的ID来获取数据),第二个是多图像部分(难处理的部分是图像编号不固定)它是动态分配的。它可以是2或5或10,具体取决于通过它的用户,我已经将所有图像路径都放在一个array-list中。)
"appointment_key":appointment_key, "agreements" :{"agreement_no":{"1":{"file_name":"bond1"}, "2":{"file_name":"bond2"}}}
现在,我只需要将该数组列表传递给API接口。好像我不知道该怎么做...
答案 0 :(得分:0)
如果您使用的是List<MultipartBody.Part>
,则可以在改造请求中将@Part
传递为@Multipart
。这是我在做什么:
所以首先我们需要一个函数将文件转换为MultipartBody.Part
:
public static MultipartBody.Part toMultiPartFile(String appointmentKey, File file) {
RequestBody reqFile = RequestBody.create(MediaType.parse(String.format("image/%s",
file.getAbsolutePath().substring(file.getAbsolutePath().lastIndexOf(".") + 1))), file);
return MultipartBody.Part.createFormData(appointmentKey,
file.getName(),
reqFile);
}
然后我确实拥有另一个函数,该函数接受Map<String, File>
作为参数将其转换为List<MultipartBody.Part>
:
public static List<MultipartBody.Part> toMultipartAttachments(Map<String, File> files) {
List<MultipartBody.Part> parts = new ArrayList<>();
if (files != null) {
for (Map.Entry<String, File> stringFileEntry : files.entrySet()) {
if (stringFileEntry.getValue() != null && stringFileEntry.getKey() != null) {
parts.add(toMultiPartFile(stringFileEntry.getKey(), stringFileEntry.getValue()));
}
}
}
return parts;
}
然后,您可以在调用改造请求后调用toMultipartAttachments
函数:
@Multipart
@POST("your api endpoint here")
function apiCall(@Part List<MultipartBody.Part> attachments)
apiCall(toMultipartAttachments(imagesMap))
您只需要将约会密钥和图像放在Map
上即可。