java - 使用 Retrofit Android 发送 ArrayList<String> 作为一部分

标签 java android server retrofit2 endpoint

尝试将 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/

相关文章:

安卓;缓存地理编码数据?

android - Flutter 应用程序与设备内置应用程序通信

java - 自定义 Android 评分栏

java - 如果我已经安装了maven eclipse插件,还可以安装maven吗?

java.lang.Long 匹配 java.lang.String

java - 在 spring-boot :run 期间启动 MockServer

Java - 扫描仪类 - 读取文本文件时跳过第一行

node.js - 具有 nginx 和基本身份验证的 Node.js 服务器

json - 从服务器端 swift Perfect 应用程序发送 json post 请求到另一个 http api Rest 应用程序

ubuntu - Linux 服务器 xmpp ejabberd 启动,状态未运行?