Как прочитать значения вложенного объекта и его ключ из Firestore в Android (Java) - PullRequest
1 голос
/ 19 мая 2019

Я пытаюсь прочитать значения из вложенных объектов вместе с ключами в Android, но я не могу найти какое-либо решение в соответствии с моим требованием. (Я новичок в разработке Firestore и Android)

Firestore-database image


Я пробовал цикл foreach, но он показывает ошибку - foreach не применим к типу 'java.util.Map': -

for(DocumentSnapshot ds: document.getData())

Итак, я попробовал это: -

Map<String, Object> myMap = (Map<String, Object>) document.getData();
String name = ""; //don't know how to get key i.e(clamp,gear) as i can't pass all of them.
String url = (String) myMap.get("url");//url returns null

Это мой код: -

FirebaseFirestore db = FirebaseFirestore.getInstance();
DocumentReference docRef = db.collection("categoryType").document("Hardware");
docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
            @Override
            public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                if (task.isSuccessful()) {
                    DocumentSnapshot document = task.getResult();
                    if (document.exists()) {
                        Log.d(TAG, "DocumentSnapshot data: " + document.getData());//see log below
                        Map<String, Object> myMap = (Map<String, Object>) document.getData();
                        String name = "";
                        String url = (String) myMap.get("url");
                        ItemCategory category = new ItemCategory(name,url);
                        itemCategoryList.add(category);
                    } else {
                        Log.d(TAG, "No such document");
                    }
                } else {
                    Log.d(TAG, "get failed with ", task.getException());
                }
                itemCategoryAdapter.notifyDataSetChanged();
            }
        });


Log.d печатает это: -
{Hammer={url=https://someURL}, Nail={url=https://someURL}, Shovel={url=https://someURL}}

Короче говоря, я хочу: -
name = "Hammer"
url = "someUrl",

name = "Nail"
url = "someurl"

1 Ответ

0 голосов
/ 19 мая 2019

Сначала вам нужно получить карту Clamp, затем использовать ее, чтобы получить свойство url. Это псевдокод, а не полный код, но иллюстрирует, что вам нужно сделать. Дженерики на картах для краткости отсутствуют:

// get the document data map from the snapshot
Map data = snapshot.getData();
// get the Clamp field, which is an object field, so it will arrive as a Map
Map clamp = (Map) data.get("Clamp");
// get the String value of the url property on the object
String url = (String) clamp.get("url");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...