Firebaseui FirestoreRecyclerAdapter:如何使用DocumentReference指向的数据

时间:2019-09-06 22:52:26

标签: firebase google-cloud-firestore firebaseui

我的数据设置如下:
-用户集合包含用户文档。
-用户文档包含“朋友”子集合。
-朋友子集合包含UserRef文档。
-UserRef文档包含对User文档的DocumentReference。

我想使用FirestoreRecyclerAdapter在RecyclerView中显示特定用户的所有朋友。从this answer看来,我无法在查询中检索由DocumentReference指向的用户文档。因此,以下代码是我尝试使用SnapshotParser这样做的尝试。但是,我不知道如何从parseSnapshot()返回用户,因为它是异步检索的。

Query query = friendsSubcollection;

FirestoreRecyclerOptions<User> options = new FirestoreRecyclerOptions.Builder<User>()
        .setQuery(query, User.class, new SnapshotParser<User>() {
            @NonNull
            @Override
            public User parseSnapshot(@NonNull DocumentSnapshot snapshot) {
               DocumentReference userRef = snapshot.toObject(DocumentReference.class);
               userRef.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
                            @Override
                            public void onSuccess(DocumentSnapshot documentSnapshot) {
                                User user = documentSnapshot.toObject(User.class); // How do I return this user from parseSnapshot()?
                            }
                        });
            }
        })
        .build();

1 个答案:

答案 0 :(得分:0)

您将无法执行此操作,因为parseSnapshot需要同步进行,但是获取另一个文档是异步的。直到parseSnapshot返回之后,文档的get才会完成回调。因此,您将无法为此使用Firebase UI-您将不得不想出自己的方式来生成多个请求以填充RecyclerView,这可能需要大量工作。