Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Firebase,从所有文档中获取arraylist字段_Java_Android_Firebase_Google Cloud Firestore - Fatal编程技术网

Java Firebase,从所有文档中获取arraylist字段

Java Firebase,从所有文档中获取arraylist字段,java,android,firebase,google-cloud-firestore,Java,Android,Firebase,Google Cloud Firestore,我需要查询一个集合。此集合组包含许多文档,显然,每个文档都包含一个标题id、一个partecippant数组(字段名为partecippant)和一个字段numpartecippants(字段名为partecippant),以及每个组的总partecippant。我附上db的照片: 现在,我可以获取partecipant字段并使用以下代码将其保存到数组中: public void getPartecipantsList(){ String email = getEmail();

我需要查询一个集合。此集合组包含许多文档,显然,每个文档都包含一个标题id、一个partecippant数组(字段名为partecippant)和一个字段numpartecippants(字段名为partecippant),以及每个组的总partecippant。我附上db的照片:

现在,我可以获取partecipant字段并使用以下代码将其保存到数组中:

public void getPartecipantsList(){
    String email = getEmail();
    final String groupTitle = getTitleBar();
    DocumentReference docRef = db.collection("users").document(email).collection("Group").document(groupTitle);

    docRef.get()
            .addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
                @Override
                public void onComplete(@NonNull Task<DocumentSnapshot> task) {

                        DocumentSnapshot document = task.getResult();

                        //Extracting participants ArrayList from the document
                        for(Object item : task.getResult().getData().values()) {

                            String[] values = String.valueOf(item).replace("[", "").replace("]", "").replace(" ", "").split(",");

                            for (String value : values){
                                    partecipantsArrayList.add(value);
                            }

                        }
                        partecipantsArrayList.remove(String.valueOf("["));
                        partecipantsArrayList.remove(partecipantsArrayList.size() - 1);
但如果我知道这个团体的名字,那就是工作。 在本例中,我想从组集合中提取每个文档,并从每个文档中提取Id和partecippants数组。我想我不能使用Task,但我必须使用QueryDocumentSnapshots。 这是我的密码

    public void getPartecipantsList() {
    final ArrayList<String> title = new ArrayList<>();
    String email = getEmail();
    DocumentReference docRef = db.collection("users").document(email);

    docRef.collection("Group")
            .get()
            .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                @Override
                public void onComplete(@NonNull Task<QuerySnapshot> task) {
                    if (task.isSuccessful()) {
                        for (QueryDocumentSnapshot document : task.getResult()) {
                            titleString = document.getId();
                            title.add(titleString);

                            String[] values = String.valueOf(document).replace("[", "").replace("]", "").replace(" ", "").split(",");

                                for (String value : values) {
                                    partecipantsArray.add(value);
                                }
                            }
                            partecipantsArray.remove(String.valueOf("["));
                            partecipantsArray.remove(partecipantsArray.size() - 1);

                            SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
                            SharedPreferences.Editor editor = sharedPreferences.edit();
                            for (int i = 0; i < title.size(); i++) {
                                editor.putInt(title.get(i) + "_size", partecipantsArray.size());
                            }
                            for (int i=0;i<title.size();i++) {
                                Log.v("Array", partecipantsArray.toString());
                                Log.v(title.get(i)+"array", String.valueOf(partecipantsArray.size()));
                            }
                            for (int i = 0; i < partecipantsArray.size(); i++) {
                                editor.putString(titleString + "_name" + i, partecipantsArray.get(i)); }
                        }
                    }


            });


}
输出完全错误:

相反,输出应为: 标题=[纽约,普罗瓦,测试]
partecipantsArray=[Andrea、Tom、Spencer……、Nico、Raul、Lorenzo、Eli]

要从单个文档中获取数组,只需要以下代码行:

db.collection("users").document(email).collection("Group").document(groupTitle).get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DocumentSnapshot> task) {
        if (task.isSuccessful()) {
            DocumentSnapshot document = task.getResult();
            if (document.exists()) {
                ArrayList<String> arrayList = (ArrayList<String>) document.get("partecipant");
                //Do what you need to do with your ArrayList
                for (String s : arrayList) {
                    Log.d(TAG, s);
                }
            }
        }
    }
});
如果要从所有文档中获取所有数组,请使用以下代码行:

db.collection("users").document(email).collection("Group").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
    @Override
    public void onComplete(@NonNull Task<QuerySnapshot> task) {
        if (task.isSuccessful()) {
            for (QueryDocumentSnapshot document : task.getResult()) {
                if (document.exists()) {
                    ArrayList<String> arrayList = (ArrayList<String>) document.get("partecipant");
                    //Do what you need to do with your ArrayList
                    for (String s : arrayList) {
                        Log.d(TAG, s);
                    }
                }
            }
        }
    }
});

输出将是所有文档中的所有参与者。

你好,Nicola。这是再现这种行为的最简单的例子吗?为什么它要调用嵌套的for对象项:task.getResult{即与父循环和一些其他迭代器相同的东西?很难说什么对问题很重要,什么是多余的。请参阅和。我使用了for对象项:task.getResult{在另一个类中,我只需要从一个文档中获取partecipients数组。这次我需要从所有文档中获取它..所以,问题是,谢谢你,第二部分正是我想要的!我终于完成了我的应用程序并解决了这个问题..非常感谢,你救了我一天!:很高兴听到这个消息;
db.collection("users").document(email).collection("Group").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
    @Override
    public void onComplete(@NonNull Task<QuerySnapshot> task) {
        if (task.isSuccessful()) {
            for (QueryDocumentSnapshot document : task.getResult()) {
                if (document.exists()) {
                    ArrayList<String> arrayList = (ArrayList<String>) document.get("partecipant");
                    //Do what you need to do with your ArrayList
                    for (String s : arrayList) {
                        Log.d(TAG, s);
                    }
                }
            }
        }
    }
});