Передача нескольких изображений через JSOnobject в Android - PullRequest
0 голосов
/ 07 марта 2019

Мне нужно загрузить этот JSONObject, который имеет 2 параметра = первый - это уже назначенный ключ назначения (один тип идентификатора для получения данных), а второй - часть с несколькими изображениями (сложная часть заключается в том, что номер изображения не является фиксированным он распределяется динамически. Это может быть 2, 5 или 10 в зависимости от пользователя, который его передает, у меня уже есть путь ко всем изображениям в одном массиве-списке.)

"appointment_key":appointment_key, "agreements" :{"agreement_no":{"1":{"file_name":"bond1"}, "2":{"file_name":"bond2"}}} 
  • bond1 и bond2 - это изображение Uri, и оно предоставляется пользователем.
  • «назначение_ключа» и «соглашения» являются статическими @fields. также "имя_файла" является статическим.
    * Я уже создал список массивов для пути к изображению. теперь мне просто нужно передать его, используя правильный метод.

Теперь мне просто нужно передать этот список массивов в интерфейс API. Похоже, я не знаю, как это сделать ...

1 Ответ

0 голосов
/ 07 марта 2019

Вы можете передать 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...