android - Firebase Firestore 查询帮助 android stuido java
问题描述
好的,这是我的问题。我创建了一个名为“users”的 firestore 数据库,并向每个人添加了来自身份验证的 UID 和他们可以选择的用户名。我想在文本字段上显示他们的用户名。
所以我做了:
private FirebaseFirestore db = FirebaseFirestore.getInstance();
private CollectionReference noteRef;
String currentUid = mAuth.getCurrentUser().getUid();
noteRef = db.collection("users");
Query query = noteRef.whereEqualTo("uid", currentUid);
但现在我一无所知......所以首先我把登录到应用程序的 currentUser UID 放入我的 Firestore 数据库中的“用户”中搜索具有相同 UID 的条目,所以我做了这个查询。问题是我现在如何获取用户名?该查询正在提供我正在寻找的条目,但我现在如何获取用户名?
解决方案
如果用户名存储为用户文档中的一个字段,您可以通过以下方式获取它:
query.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().get("username"));
}
} else {
Log.d(TAG, "Error getting documents: ", task.getException());
}
}
});
有关这方面的更多示例,请参阅有关执行查询的 Firebase 文档。
请注意,通常使用 UID 作为密钥来存储用户的文档,这使得查找它们更容易一些。
要像这样存储文档,您可以执行以下操作:
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
FirebaseFirestore.getInstxance()
.collection("users")
.document(uid)
.set(...)
然后你会得到它:
FirebaseFirestore.getInstxance()
.collection("users")
.document(uid)
.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document.exists()) {
Log.d(TAG, "DocumentSnapshot data: " + document.getData());
} else {
Log.d(TAG, "No such document");
}
} else {
Log.d(TAG, "get failed with ", task.getException());
}
}
});
您会注意到,我们现在不再需要之前的循环,因为我们正在获取一个特定的文档,而不是需要查询来为用户查找文档。
推荐阅读
- xml - XSLT:将元素名称作为字符串传递并将其转换为 XPATH 表达式
- docker - docker storage driver 是持久存储吗
- r - 应用字典后如何在 quanteda 中查看标记
- android - 如何在离子4中将json日期转换为门
- python - 如何通过添加其他列中项目的值来附加具有相同值的文件中的列?
- reactjs - 如何使用 SASS 为 NPM 打包 TypeScript React 组件
- c# - 如何解决“方法 'Replace' 没有重载需要 '1' 参数”
- android - ViewBinding 在第二个屏幕中不起作用[错误:找不到符号导入 com.example.demoapp.databinding.DragAndDropBinding]
- sftp - Nifi:无法 sftp 连续生成的文件
- c - 使用指针检查字符串是否为回文