簡體   English   中英

Firebase,從所有文檔中獲取arraylist字段

[英]Firebase, get an arraylist field from all documents

我需要查詢一個集合。該集合“組”包含許多文檔,並且每個文檔都包含一個標題(id),一組參與者數組,其字段名為“ partecipant”,以及一個字段“ numPartecipants” ,以及每組的總參加人數。 我附上一張分貝的照片: 在此處輸入圖片說明

現在,我可以使用以下代碼獲取“ 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和partecipants數組。.我認為我不能使用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)); }
                        }
                    }


            });


}

輸出完全錯誤: 在此處輸入圖片說明

輸出應該改為:title = [New York,Prova,Test] 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);
                }
            }
        }
    }
});

您的logcat中的輸出將是:

Nico
Raul
Lorenzo
Eli

如果要從所有文檔中獲取所有數組,請使用以下代碼行:

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);
                    }
                }
            }
        }
    }
});

輸出將是所有文檔中的所有參與者。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM