【问题标题】:Check if Firestore query is empty检查 Firestore 查询是否为空
【发布时间】:2019-07-02 07:26:49
【问题描述】:

我正在运行查询以检查布尔值 (isLocked),以了解一个或多个文档是否被锁定:

final CollectionReference ref = FirebaseFirestore.getInstance().collection( "folders" ).document( user.getUid() ).collection( folder );

Query query = ref.whereEqualTo( "isLocked", true );
query.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
    @Override
    public void onComplete(@NonNull Task<QuerySnapshot> task) {
        boolean b = task.getResult().isEmpty();
        ToastEX.showShort( MainActivity.this, b ? "isLocked=1" : "isLocked=0");
    }
});

这总是返回 isLocked=1,不管数据库上有什么。

如何让它工作?非常感谢。

编辑:添加屏幕截图:

【问题讨论】:

  • 由于我们看不到数据库中的内容,也看不到变量的值,因此很难说查询是否真的按照您的想法进行。我很难相信这个查询是完全错误的。尝试在此处检查所有变量的内容,或对它们的值进行硬编码,以绝对确定您正在查询您真正想要的内容。
  • 我更喜欢 addOnCompleteListener 并在 if 语句中检查 task.getResult.isEmpty()

标签: java android firebase google-cloud-firestore


【解决方案1】:

当您覆盖onComplete() 方法时,请务必检查任务是否成功,如以下代码行所示:

if (task.isSuccessful()) {
    boolean b = task.getResult().isEmpty();
    ToastEX.showShort( MainActivity.this, b ? "isLocked=1" : "isLocked=0");
}  else {
    Log.d(TAG, "Error getting documents: ", task.getException());
}

也不要忘记实现else 部分以查看是否有错误消息。

【讨论】:

  • 如果任务未成功完成,getResult() 将抛出未经检查的异常,因此这并不能真正解决问题。
  • 请将您的数据库结构添加为屏幕截图,并请向我们展示您在参考中使用的user.getUid()folder 的值。
  • 已添加屏幕截图。 'ggg' 是文件夹。查看文档结构。
  • 您是否尝试过像 Doug Stevenson 所建议的那样使用顽固的价值观?结果如何?
  • b = true 当没有文档被锁定时,反之亦然,所以我现在很好。谢谢亚历克斯!
猜你喜欢
  • 2019-07-20
  • 2018-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
相关资源
最近更新 更多