java - Firebase Cloud Firestore 引用返回 null
问题描述
因此,我在 firestore 中创建了 firebase 用户配置文件,它将保存用户数据,例如他们的姓名、电子邮件、电话号码和他们的奖励积分。用户使用 Google Sign-in 登录。
这就是我将数据写入firestore的方式。
private void addNewUser() {
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
String uid = user.getUid();
for (UserInfo profile : user.getProviderData()) {
// Id of the provider (ex: google.com)
String providerId = profile.getProviderId();
// UID specific to the provider
// Name, email address, and profile photo Url
String name = profile.getDisplayName();
String email = profile.getEmail();
Map<String, Object> newUser = new HashMap<>();
newUser.put("Nama", name);
newUser.put("Email", email);
// Add a new document with a generated ID
db.collection("users").document(uid).set(newUser);
}
}
}
那一个有效。
但是当我尝试使用检索数据时Document Reference
@Override
public void onStart() {
super.onStart();
// Check if user is signed in (non-null) and update UI accordingly.
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
String curUser = user.getUid();
DocumentReference documentReference = db.document(curUser);
documentReference.addSnapshotListener(this.getActivity(), new EventListener<DocumentSnapshot>() {
@Override
public void onEvent(@javax.annotation.Nullable DocumentSnapshot documentSnapshot, @javax.annotation.Nullable FirebaseFirestoreException e) {
if (documentSnapshot.exists()) {
String userNama = documentSnapshot.getString(KEY_NAMA);
String userEmail = documentSnapshot.getString(KEY_EMAIL);
namaUser.setText(userNama);
emailUser.setText(userEmail);
}
}
});
} else {
Intent intent = new Intent(Home.this.getActivity(), LoginActivity.class);
startActivity(intent);
}
}
本例中的文档引用curUser
,返回 null。我不知道我做错了什么。
解决方案
您需要users
在您的DocumentReference
改变,
DocumentReference documentReference = db.document(curUser);
至,
DocumentReference documentReference = db.collection("users").document(curUser);
推荐阅读
- javascript - JavaScript,无法对对象进行排序
- html - 使用 CSS 在子菜单下拉菜单下创建子菜单
- java - 如何将图像压缩到 5kb?
- c++ - 与储备无关的向量重新分配
- python - 如何抓取表格并找出特定列中最大数量的相应条目?
- c# - C# XML 对象,插入值
- sql - SQL Case - 对 ELSE 返回的值进行分组
- python - SSL:SSLV3_ALERT_HANDSHAKE_FAILURE sslv3 警报握手失败 (_ssl.c:833)
- java - @SerializedName 被忽略
- azure - 在 Azure 资源管理模板中创建 StorageV2 存储帐户