Firebaseui FirestoreRecyclerAdapter:如何使用 DocumentReference 指向的数据
Firebaseui FirestoreRecyclerAdapter: How to use data pointed to by DocumentReference
我的数据设置如下:
- 用户集合包含用户文档。
- 用户文档包含朋友子集合。
- Friends 子集合包含 UserRef 文档。
- UserRef 文档包含对用户文档的 DocumentReference。
我想使用 FirestoreRecyclerAdapter 在 RecyclerView 中显示特定用户的所有好友。从 开始,我似乎无法检索查询中 DocumentReference 指向的用户文档。因此,以下代码是我尝试使用 SnapshotParser 来执行此操作。但是,我不知道如何 return 来自 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();
您将无法执行此操作,因为 parseSnapshot 需要同步发生,但获取另一个文档是异步的。直到 parseSnapshot returns 之后,文档获取才会通过回调完成。因此,您将无法为此使用 Firebase UI - 您必须想出自己的方式来发出多个请求来填充 RecyclerView,这可能需要大量工作。
我的数据设置如下:
- 用户集合包含用户文档。
- 用户文档包含朋友子集合。
- Friends 子集合包含 UserRef 文档。
- UserRef 文档包含对用户文档的 DocumentReference。
我想使用 FirestoreRecyclerAdapter 在 RecyclerView 中显示特定用户的所有好友。从
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();
您将无法执行此操作,因为 parseSnapshot 需要同步发生,但获取另一个文档是异步的。直到 parseSnapshot returns 之后,文档获取才会通过回调完成。因此,您将无法为此使用 Firebase UI - 您必须想出自己的方式来发出多个请求来填充 RecyclerView,这可能需要大量工作。