Как получить определенный элемент в массиве, хранящемся как FieldValue в Firestore - PullRequest
1 голос
/ 06 ноября 2019

Я сохранил массив пользовательских классов, таких как «Пациент», в поле документа. Он сохранен должным образом, но теперь, когда я пытаюсь загрузить его в Android Studio, это выглядит следующим образом в записи журнала: -

[{"meetingnumber" = 26, "name" = "Neeraj Aggarwal", "номер телефона" = "+ 917988081391"}, {назначение> = 27, имя = Ааска Шарма, номер телефона = + 917988081391}, {назначение> = 28, имя = Мохит sskm, номер телефона = + 917988081391}]

Это похоже на массив, но я не могу применить какое-либо свойство массива к этому. Например, когда я пытался получить первый элемент этого массива, например ArrayName[0], он отображает ошибку вроде:

java.lang.ClassCastException: java.util.HashMap не может быть приведен к com.example.reception.Patient (получение моего имени проекта и пациента, как вы знаете,настраиваемое имя класса)

Также я не знаю, как получить значение определенного элемента в массиве, хранящемся в качестве значения поля. Подобно тому, как мы можем извлечь конкретное значение карты с помощью documentsnapshot.get («Fieldname.Keyname»), существует ли такой метод, чтобы получить элемент на определенной позиции в массиве.

1 Ответ

0 голосов
/ 06 ноября 2019

Firebase решил мою проблему. Их ответ таков: -

Поддержка Firebase

10: 56 AM (29 минут назад)

мне

Здравствуйте, Neeraj,

Я Йен, здесь, чтобы ответить на любые ваши вопросы, которые могут возникнуть при использовании Firestore для Android.

Если вы используете метод snapshot.get ()в поле, содержащем массив объектов, Android SDK вернет это значение в виде списка объектов HashMap Java. В настоящее время нет способа переопределить это поведение, поэтому вам может потребоваться вручную получить каждую пару ключ-значение и установить значение для объекта Patient.

При этом можно конвертировать весь документснимок в Java-объект за один раз, без необходимости использования метода, такого как snapshot.get (). Предполагая, что ваш класс Doctor выглядит примерно так:

public class Doctor {
    private List<Patient> patients;
    //other variables

    //Constructor must be empty
    public Doctor() {}

    public List<Patient> getPatients() {
        return patients;
    }

    public void setPatients(List<Patient> patients) {
        this.patients = patients;
    }

Вы можете преобразовать снимок документа в объект Doctor с помощью всего одной строки кода:

Doctor doctor = snapshot.toObject(Doctor.class);

Оттуда вы можете получитьваш список Java-пациентов, а затем выполните вычисления на основе данных о пациенте, как и предполагалось.

Таким образом, вся хитрость заключалась в том, чтобы просто использовать метод toObject.

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