@Drew20
Недопрограммист Android))

Как написать функцию для получения списка нескольких/одного прикрепленных к письму файлов в android retrofit?

У меня в приложении я работаю с сообщениями которые приходят мне в одном сервисе. У каждого письма может быть, или не быть, прикрепленный файл который пользователь захочет скачать. Для скачивания мне выдали апи, для начала вот само апи:
URL
id - message id for view INT
attach_file_name - name of attached file

https://сервер/v1/message/<id>/attachment/<attach_file_name>

Method
GET
URL Params
type 
0 - for received messages
1 - for sent messages

Data Params
{}

Success Response
HTTP 200
Headers:
Content-Type: TYPE # file mimetype
Content-Disposition: attachment; filename=FILENAME # attached file name
Body: file

Sample Call
curl -i -X GET -H "Content-Type:application/json" -H "Authorization:Bearer $ACCESS_TOKEN" https://сервер/v1/message/ID/attachment/ATTACH_FILE_NAME?type=TYPE


вот пример как в ответе сервера, в письме выглядит два прикрепленных файла:
"attach": [[название файла ", 0.0], ["название файла ", 0.4443359375]]


у меня есть класс который отвечает за показ самого сообщения, для того что-бы скачать определенный файл мне нужно его имя и id сообщения в котором этот файл есть. Класс для показа сообщения имеет несколько функций, которые направлены на то, что-бы вытащить из ответа сервера все что касается письма, тему дату получения, отправителя, и само сообщение. Я так понимаю что нужно в этот же класс вставить функцию которая будет получать список одного/нескольких прикрепленных файлов. Вот класс который я использую для показа сообщения:
public class ViewMessage {

    @SerializedName("date")
    @Expose
    private String date;
    @SerializedName("type")
    @Expose
    private String type;
    @SerializedName("user_id")
    @Expose
    private String userId;
    @SerializedName("body")
    @Expose
    private String body;
    @SerializedName("can_delete")
    @Expose
    private String canDelete;
    @SerializedName("can_reply")
    @Expose
    private String canReply;
    @SerializedName("name")
    @Expose
    private String name;
    @SerializedName("subject")
    @Expose
    private String subject;

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    /*public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }*/

    public String getBody() {
        return body;
    }

    public void setBody(String body) {
        this.body = body;
    }

    public String getCanDelete() {
        return canDelete;
    }

    /*public void setCanDelete(String canDelete) {
        this.canDelete = canDelete;
    }*/

    public String getCanReply() {
        return canReply;
    }

    /*public void setCanReply(String canReply) {
        this.canReply = canReply;
    }*/

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSubject() {
        return subject;
    }


    /*public void setSubject(String subject) {
        this.subject = subject;
    }*/

    
}


я не могу понять как будет выглядеть функция, которая будет вытаскивать название и размер одного/нескольких прикрепленных файлов. Это по факту массив, в котором есть еще массивы. Но я не могу создать нужный мне метод.
Я хочу сделать такую функцию которая будет получать названия всех прикрепленных файлов которые есть в сообщении.

Если кто понял как мне помочь, то я буду очень благодарен за предоставленную помощь.
  • Вопрос задан
  • 150 просмотров
Пригласить эксперта
Ответы на вопрос 1
iLLuzor
@iLLuzor
Java, Kotlin, Android Developer
Работайте, как с массивом массивов. Создайте переменную

@SerializedName("attach")
private String[][] attach;


И дальше работайте с ним, как нужно:
attach[0][0] // имя
attach[0][1] // размер. если нужно, приводите ко float
// и тд


Например, чтобы вернуть все имена файлов, нужно написать метод, который пройдёт по данному массиву, запишет все имена в новый массив (или список) и вернёт его.

Если есть возможность менять api, можно сделать что-то вроде такого:
[ {"name":"File 1", "size":12.1},  {"name":"File 2", "size":12.2} ]

Затем создать приватный класс:
private class FileData{
    private String name;
    private float size;
}


И дальше просто работать с массивом:
@SerializedName("attach")
private FileData[] attach;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы