Отправка ArrayList <String>как части с использованием Retrofit Android - PullRequest
0 голосов
/ 06 апреля 2020

Попытка отправить 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 как часть?

1 Ответ

0 голосов
/ 06 апреля 2020

(я не пробовал, но это должно работать)

Изменить определение прототипа запроса, чтобы interest было Part, а не PartMap:

@Part("interest") List<String> interest,

Затем передать проценты в виде списка строк. Нет необходимости конвертировать строки в RequestBody s, Retrofit сделает это за вас.

Call<ResponseBody> call = RetrofitClient.getInstance()
            .getApi()
            .createPost(
                    createPartFromString(title),
                    createPartFromString(link),
                    interest,
                    prepareFilePart("image", selectedImage)
            );
...