Как я могу получить значение карты внутри массива из Firestore? - PullRequest
0 голосов
/ 23 апреля 2020

enter image description here

У меня вышеупомянутая структура данных, хранящаяся в Cloud Firestore. Я хочу сохранить флоты, которые представляют собой массив карт с «id» и «name», хранящихся в Firestore. У меня трудности с получением данных и сохранением их в виде массива. Я просто могу получить странную строку, но любой метод для хранения в виде массива строк? Ниже приведен код, который я использовал.

public void getFleets() {

    DocumentReference document = mDb
            .collection(FirestoreService.CLIENT_COLLECTION)
            .document(new SessionService(getApplicationContext()).getClientUID());

    document.get()
            .addOnCompleteListener(task -> {
                if (task.isSuccessful() && task.getResult() != null) {
                    DocumentSnapshot doc = task.getResult();
                    List<String> group = (List<String>) doc.get("fleets");
                    Log.i(TAG, "getFleets: " + group);

                } else
                    Log.d(TAG, "Error getting documents: ", task.getException());
            });
}

Это результат массива:

[{name=Caminhão, id=1}, {name=Escavadeira, id=2}, {name=Carregadeira, id=3}, {name=Trator, id=4}]

1 Ответ

1 голос
/ 23 апреля 2020

Как вы сказали, ваше поле fleets представляет собой массив карт. То, что вы видите в результатах отладки, именно то, что я ожидал. Обратите внимание, что внешние квадратные скобки обозначают java объект типа списка, а внутренние фигурные скобки указывают java объекты типа карты внутри него. Однако ваш тип generi c неправильный. Вместо List<String> вы должны использовать List<Map<String, Object>> для учета объектов Map в списке.

Если вы хотите вместо List<String>, вам придется написать некоторый код, чтобы получить искомую строку из карты и построить новый список, используя это значение. Итак, если вы хотите, чтобы свойство name было для каждого элемента карты, вы могли бы сделать что-то вроде этого:

List<Map<String, Object>> groups = (List<Map<String, Object>>) doc.get("fleets");
ArrayList<String> names = new ArrayList<>();
for (Map<String, Object> group : groups) {
    String name = group.get("name");
    names.add(name);
}

Теперь у вас есть список имен из карт в списке.

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