我想在Cloud Firestore中创建一个用户数据库,其中电子邮件是每个用户的唯一ID.用户应该在a中collection,每个用户都是a document.
这是我检查用户是否存在于登录活动中的方式:
FirebaseFirestore db = FirebaseFirestore.getInstance();
final DocumentReference userRef = db.collection("users").document(email);
userRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
Toast.makeText(LoginActivity.this, task.getResult().toString(),
Toast.LENGTH_SHORT).show();
if (document != null) {
//The user exists...
}
else {
//The user doesn't exist...
}
}
}
else
connectionErrorActivity();
}
});
Run Code Online (Sandbox Code Playgroud)
数据库为空,如您所见:
我的问题是,document即使数据库是空的,也永远不会为空.该toast显示,该字符串值document是:COM.GOOGLE.FIREBASE.FIRESTORE.DOCUMENTSNAPSHOT@8ED6B96.
这是正确的方法吗?我该怎么办才能修复它?
从Firestore文档中查看此代码示例:
DocumentReference docRef = db.collection("cities").document("SF");
docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document != null && 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());
}
}
});
Run Code Online (Sandbox Code Playgroud)
https://firebase.google.com/docs/firestore/query-data/get-data
为什么检查一下document != null?如果我正确读取源代码(初学者),该exists方法将在内部检查无效.