尝试将 ArrayList 与图像和其他详细信息一起发送
选中复选框时获取列表项
ArrayList<String> intrest = new ArrayList<>();
switch (buttonView.getId()) {
case R.id.business:
if (business.isChecked()) {
interest.add(String.valueOf(business.getText()));
}
break;
case R.id.politics:
if (politics.isChecked()) {
interest.add(String.valueOf(politics.getText()));
}
break;
case R.id.entertainment:
if (entertainment.isChecked()) {
interest.add(String.valueOf(entertainment.getText()));
}
break;
服务器响应
{"message":"Created successfully","data":{"interest":[],"showAds":true,"description":"ghbjbjj",
"title":"title","link":"link","image": "imageURL"}}
接口(interface)类
@Multipart
@POST("/api/post")
Call<ResponseBody> createPost(
@Part("description") RequestBody description,
@Part("title") RequestBody title,
@Part("link") RequestBody link,
@PartMap Map<String, RequestBody> interest,
@PartMap Map data,
@Part MultipartBody.Part adsImage
);
@NonNull
private RequestBody createPartFromString(String descriptionString) {
return RequestBody.create(descriptionString,
okhttp3.MultipartBody.FORM);
}
Map<String, RequestBody> partMap = new HashMap<>();
for (int i = 1; i < interest.size(); i++) {
partMap.put("interest", createPartFromString(interest.get(i)));
}
Call<ResponseBody> call = RetrofitClient.getInstance()
.getApi()
.createPost(
createPartFromString(title),
createPartFromString(link),
partMap,
prepareFilePart("image", selectedImage)
);
除 ArrayList 之外的所有其他内容都会发送到服务器。
如何将 ArrayList 作为一部分传递?
最佳答案
(我还没有尝试过,但这应该有效)
更改请求原型(prototype)定义,以便兴趣
是Part
而不是PartMap:
@Part("interest") List<String> interest,
然后将兴趣作为字符串列表传递。无需将字符串转换为 RequestBody
,Retrofit 会为您完成。
Call<ResponseBody> call = RetrofitClient.getInstance()
.getApi()
.createPost(
createPartFromString(title),
createPartFromString(link),
interest,
prepareFilePart("image", selectedImage)
);
关于java - 使用 Retrofit Android 发送 ArrayList<String> 作为一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61060044/