gpt4 book ai didi

android - 身份验证后在 Firestore 中查询 uid 文档 => IllegalStateException

转载 作者:搜寻专家 更新时间:2023-11-01 08:23:53 24 4
gpt4 key购买 nike

我的 Android 应用同时使用 Firebase 身份验证和 Firestore。我正在尝试做的是以下内容:

  • 用户登录
  • 如果这是用户第一次登录,则创建以他的 uid 命名的文档
  • 如果用户之前已经登录(因此由 uid 命名的文档已经存在),那么我会加载一些进一步的数据。

这是我解决这个问题的逻辑:

  • 从 FirebaseAuth 实例获取 FirebaseUser
  • 我从 FirebaseUser 得到 uid
  • 用这个 uid 建立一个 DocumentReference
  • 对 DocumentReference 使用 get() 查询
  • 如果 DocumentSnapshot 为 != null 则用户已存在于 firestore 中
  • 如果 DocumentSnapshot == null 用户不存在,我在 firestore 中创建它

我正在测试下面的代码:

    FirebaseUser user = mAuth.getCurrentUser();
if(user != null) {
// get uid from user
String uid = user.getUid();

// make a query to firestore db for uid
DocumentReference userDoc = db.collection("users").document(uid);
userDoc.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document != null) {
Log.d(LOG_TAG, "DocumentSnapshot data: " + task.getResult().getData());
} else {
Log.d(LOG_TAG, "No such document");
}
} else {
Log.d(LOG_TAG, "get failed with ", task.getException());
}
}
});
}

当 firestore 中存在 uid 时,我会收到包含适当数据的日志消息,但当它不存在时,我会收到以下异常,而且我找不到使用 DocumentSnapshot.exists() 的方法:

java.lang.IllegalStateException: This document doesn't exist. Use DocumentSnapshot.exists() to check whether the document exists before accessing its fields.

谁能帮我理解我做错了什么?

感谢一百万! :)

最佳答案

get() 返回的对象是一个 DocumentSnapshot不是文档本身。 DocumentSnapshot 永远不会为空。使用 exists() 方法来确定快照是否包含文档。如果 exists() 为真,您可以 安全地使用其中一种 getXXX() 方法(在您的情况下,getData() 用于 map )来获取文档的值。

@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot snapshot = task.getResult();
if (snapshot.exists()) {
Log.d(LOG_TAG, "DocumentSnapshot data: " + snapshot.getData());
} else {
Log.d(LOG_TAG, "No such document");
}
} else {
Log.d(LOG_TAG, "get failed with ", task.getException());
}
}

关于android - 身份验证后在 Firestore 中查询 uid 文档 => IllegalStateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47317064/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com