【发布时间】:2021-03-22 19:18:38
【问题描述】:
我想知道您是否遇到了与我现在遇到的类似的问题:
我正在 Android Studio 中使用 Java 构建一个 Android 项目。我使用 Firestore 作为存储和检索 Android 前端数据的数据库。我上周五开始构建这个项目。在项目的第一天,我使用以下方式进行查询:
final FirebaseFirestore db = FirebaseFirestore.getInstance();
CollectionReference userCollectionRef = db.collection("users");
Query userQuery = userCollectionRef.whereEqualTo("email", getIntent().getStringExtra("email"));
userQuery.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
User newUser = document.toObject(User.class);
//Do something there
}
}}}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d("why fail", e.toString());
}
});
User 类定义为:
@IgnoreExtraProperties
public class User {
String firstName;
String lastName;
String major;
String email;
String password;
String ID;
String photo;
boolean isActive;
boolean isManager;
//getters and setters here
}
Firestore 数据库如下所示: Firestore structure
在项目的第一天,查询运行良好。但从那天起,每当我在不同的 Activity 中使用相同的查询(完全相同:我将此代码复制并粘贴到不同的 Activity 以获取相同的用户信息)时,Firestore 都会停止返回任何结果。
最奇怪的是,Firestore 查询仍在项目第一天实施的活动中工作。我试图查看 Firestore 是否在 Logcat 中记录了任何内容,但没有?!
结果,我最终使用以下方法进行查询,这非常愚蠢,但这是目前唯一可行的方法:
Task<QuerySnapshot> task = db.collection("users").get();
while (!task.isComplete()) {
//Wait for finish
}
//Loop through documents to check for match
for (DocumentSnapshot d : task.getResult()) {
if(d.toObject(User.class).getEmail().equals(getIntent().getStringExtra("email"))){
userDocumentReference = d.getReference();
User newUser = d.toObject(User.class);
//Do something here
break;
}
}
我想知道是否有人可以阐明我应该做些什么来解决这个问题?非常感谢您的帮助!
【问题讨论】:
-
您确定您从 Intent 对象中获得的电子邮件地址与第一个活动中的电子邮件地址相同吗?
-
是的,我很积极!
标签: android firebase google-cloud-firestore