尝试与图像和其他详细信息一起发送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"}}
接口类
@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作为一部分传递?
(我还没有尝试过,但是这个[[应该有效)
更改请求原型定义,以使interest
是Part
而不是PartMap:@Part("interest") List<String> interest,
然后将兴趣作为字符串列表传递。无需将字符串转换为RequestBody
,Retrofit会为您完成。
Call<ResponseBody> call = RetrofitClient.getInstance() .getApi() .createPost( createPartFromString(title), createPartFromString(link), interest, prepareFilePart("image", selectedImage) );