如何从Android的Firestore中的子集合中获取数据?

时间:2019-05-25 00:52:20

标签: java android firebase google-cloud-firestore

我通过以下方式拥有Firestore数据库:

Image Database Firestore

我一直尝试这样来获取子集合的值:

  FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
    DocumentReference bulletinRef = rootRef.collection("facultades").document("3QE27w19sttNvx1sGoqR").collection("escuelas").document("0");
    bulletinRef.get()
            .addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
                @Override
                public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                    if (task.isSuccessful()) {
                        DocumentSnapshot document = task.getResult();
                        Log.d(LOG_TAG, "RESULTADO DE LA CONSULTA" + "===" + document.getData());
                    }
                }
            });

但这确实返回null: Image result

请帮助我。

2 个答案:

答案 0 :(得分:0)

您将获得null,因为escuelas不是的子集合,它是一个包含HashMap类型的对象的数组。所以下面的代码行:

DocumentReference bulletinRef = rootRef.collection("facultades").document("3QE27w19sttNvx1sGoqR")
    .collection("escuelas").document("0");

永远不会工作。如果要在escuelas数组中获取数据,请注意,array类型字段作为List的地图从Cloud Firestore数据库到达。因此,请使用以下代码行:

rootRef.collection("facultades").document("3QE27w19sttNvx1sGoqR").get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DocumentSnapshot> task) {
        if (task.isSuccessful()) {
            DocumentSnapshot document = task.getResult();
            if (document.exists()) {
                List<Object> list = (List<Object>) document.get("escuelas");
                //Iterate throught the list and get the data
            }
        }
    }
});

请注意,在进行迭代时,从列表中获得的每个元素的类型均为HashMap。因此,您需要再次进行迭代以获取每个HashMap对象中的相应数据。

答案 1 :(得分:0)

谢谢,这确实对我有帮助,我用这段代码进行了迭代

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
    rootRef.collection("facultades").document("3QE27w19sttNvx1sGoqR")
            .get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
        @Override
        public void onComplete(@NonNull Task<DocumentSnapshot> task) {
            if (task.isSuccessful()) {
                DocumentSnapshot document = task.getResult();
                if (document.exists()) {
                    List<Object> list = (List<Object>) document.get("escuelas");
                    //Iterate throught the list and get the data

                    Map<String, String> map = new HashMap<>();
                    map.put("key2", list.toString());
                    for (Map.Entry<String, String> entry : map.entrySet()) {
                        System.out.println(entry.getKey() + " = " + entry.getValue());
                    }
                }
            }
        }
    });

这是结果:Image result

但是我感到困惑,我怎么能得到这个:

image database

Facultades>所有文档> escuelas>名称