【问题标题】:Firestore only works in some parts of my code?Firestore 仅适用于我的代码的某些部分?
【发布时间】: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


【解决方案1】:

我认为您不必在另一个活动中定义 firebasefirestore 实例,然后它们就会崩溃......或者如果我错了,那么请显示完整的活动崩溃意味着活动代码崩溃

【讨论】:

  • 感谢您的意见。我在需要查询的每个活动中声明一个 firebasefirestore 实例。您能否详细说明“崩溃的活动代码”?我只是尝试使用我原始帖子中的这段代码创建一个全新的活动,但它仍然无法正常工作。我试图记录它,但 Logcat 没有捕捉到任何东西......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多