我正在为我的Android应用使用Firebase Authentification和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.
任何人都可以帮我理解我做错了吗?
万分感谢! :)
答案 0 :(得分:3)
get()
返回的对象是DocumentSnapshot而不是文档本身。 DocumentSnapshot
永远不会为空。使用exists()
方法确定快照是否包含文档。如果exists()
为真,则可以
安全地使用getXXX()
方法之一(在您的情况下,getData()
作为地图)来获取文档的值。
@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());
}
}