web-dev-qa-db-ja.com

Firestoreのコレクションからドキュメントのリストを取得する方法Android

Firestoreデータベースの私の構造:

|
|=>root_collection
                  |
                  |=>doc1
                         |                  
                         |=>collection
                  |
                  |=>doc2
                         |                  
                         |=>collection
                  |
                  |=>doc3
                         |                  
                         |=>collection

ここで、root_collectionからドキュメントのリストを取得します。次のデータ{"doc1", "doc2", "doc3"}のリストがあります。スピナーを作成し、これらのデータをスピナーに入れたいので、それが必要です。その後、ユーザーはドキュメントを選択してダウンロードします。

私は以下のコードを使用しようとします:

firestore.collection("root_collection")
            .get()
            .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                @Override
                public void onComplete(@NonNull Task<QuerySnapshot> task) {
                    if (task.isSuccessful()) {
                        for (QueryDocumentSnapshot document : task.getResult()) {
                            Log.d(TAG,document.getId() + " => " + document.getData());
                        }
                    } else {
                        Log.d(TAG, "Error getting documents: ", task.getException());
                    }
                }
            });

しかし、コードが機能するのは、ドキュメントにコレクションが含まれていないデータの構造がある場合のみです。それ以外の場合は、QueryDocumentSnapshotにドキュメントがありません。

ありがとう!

5
Ivan Banha

root_collection内にドキュメントのすべての名前を含むリストを作成するには、次のコードを使用してください。

firestore.collection("root_collection").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
    @Override
    public void onComplete(@NonNull Task<QuerySnapshot> task) {
        if (task.isSuccessful()) {
            List<String> list = new ArrayList<>();
            for (QueryDocumentSnapshot document : task.getResult()) {
                list.add(document.getId());
            }
            Log.d(TAG, list.toString());
        } else {
            Log.d(TAG, "Error getting documents: ", task.getException());
        }
    }
});

Logcatの結果は次のようになります。

[doc1, doc2, doc3]

このコードは、それらのドキュメント内にいくつかのプロパティがある場合にのみ機能します。そうでない場合は、空のリストで終了します。

8
Alex Mamo