Получение нескольких данных из Firestore - PullRequest
0 голосов
/ 22 января 2020

enter image description here

Выше моя база данных в Firestore. Как видно, в качестве полей есть 2 строки и 2 (или более) массива.

Я буду извлекать данные для преобразования одного и того же в разные графики. Например: 1. График, показывающий сумму всех глав всех пользователей 2. График, показывающий сумму "chapter1" всех пользователей. 3. График, показывающий средние значения по всем главам и т. Д. c.,

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

Теперь моя проблема в том, чтобы получить доступ к этим данным, чтобы использовать их в различных действиях.

Я попытался использовать HashMap Map>, чтобы сохранить значения phonenumb, chapter (x) и значения chapter (x) соответственно.

Ниже приведен код для доступа к данным:

CollectionReference chemistry = db.collection("RESULTS").document("Summary").collection("ChemistryVII");
                chemistry
                        .whereEqualTo("school", "Test School")
                        .get()
                        .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                            @Override
                            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                                for (DocumentSnapshot document : task.getResult()) {
                                    Map<String, Object> map = document.getData();
                                    for (Map.Entry<String, Object> entry : map.entrySet()) {
                                        if (entry.getKey().contains("chapter")) {
                                            if (outer.isEmpty() || !outer.containsKey(map.get("phonenumb"))) {
                                                Map<String, Object> inner = new HashMap<>();
                                                inner.put(entry.getKey(), entry.getValue());
                                                String phonenumb = map.get("phonenumb").toString();
                                                outer.put(phonenumb, inner);
                                            } else {
                                                Map<String, Object> inner = new HashMap<>();
                                                inner.put(entry.getKey(), entry.getValue());
                                                String phonenumb = map.get("phonenumb").toString();
                                                outer.put(phonenumb, inner);
                                            }

                                        }
                                    }
                                }
                                //Toast("Outer Details  " + outer);
                                schoolGraph();
                            }
                        });

Однако это не будет работать, поскольку для данного ключа (номер телефона) может быть несколько записей.

Попытка понять, как лучше всего получить доступ к таким данным и использовать их для нескольких действий.

1 Ответ

0 голосов
/ 29 января 2020

Ха sh ключ карты уникален. Каждый раз, когда вы добавляете новый Объект с тем же ключом, старое значение с тем же ключом будет перезаписываться.

Я думаю, что логика c в этой части верна:

if (outer.isEmpty() || !outer.containsKey(map.get("phonenumb"))) {
    Map<String, Object> inner = new HashMap<>();
    inner.put(entry.getKey(), entry.getValue());
    String phonenumb = map.get("phonenumb").toString();
    outer.put(phonenumb, inner);

Вы вставляете во внутреннюю карту сумму первой главы. Поскольку внешняя карта не имеет ключа phonenumb, вам также необходимо вставить ее во внешнюю карту.

Однако в части else:

Map<String, Object> inner = new HashMap<>();
inner.put(entry.getKey(), entry.getValue());
String phonenumb = map.get("phonenumb").toString();
outer.put(phonenumb, inner);

Вам не нужен outer.put(phonenumb, inner);, потому что внутреннее уже существует и имеет сумму главы.

Здесь у внешнего есть ключ 'номер телефона', вам просто нужно вставить на внутреннюю карту новую сумму входа: inner[chapter] = sum.

Вам нужно что-то вроде outert[phonenumb][chapter] = sum

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