【问题标题】:Firebase query return wrong valueFirebase 查询返回错误值
【发布时间】:2019-12-25 13:49:11
【问题描述】:

当我使用 OrderByChild 或带有 startAt 或 equalTo 的键时,它返回错误值

这是equalTo

        String diy = intent.getStringExtra(PARCELABLE_KEY);
        Query qr = dr.child(AddDIYFragment.DIY_CHILD).orderByChild("title").equalTo(diy);

这是与 startAt 相关的

        Query searchQueryNum2 = reference.child(AddDIYFragment.DIY_CHILD).orderByChild("title").startAt(text);
        searchQueryNum2.addListenerForSingleValueEvent(this);

我尝试 orderByKey 但它也不起作用

编辑 JSON 树示例(已编辑但我可以添加更多)

{
  "gg0" : {
    "category" : "lifestyle",
    "eq" : "SMTH",
    "title" : "gg"
  },
  "hdhshs5" : {
    "category" : "Sports",
    "eq" : "hshsj",
    "title" : "hdhshs"
  },
  "hdhshsjsjs6" : {
    "category" : "Sports",
    "eq" : "eooe",
    "title" : "hdhshsjsjs"
  },
  "java1" : {
    "category" : "Sports",
    "eq" : "hshjs",
    "title" : "java"
  },
  "jshsjs7" : {
    "category" : "Sports",
    "eq" : "hdhshsjjs",
    "title" : "jshsjs"
  },
  "jsjsjsjs9" : {
    "category" : "Sports",
    "eq" : "hshshwhw",
    "title" : "jsjsjsjs"
  },
  "papajs8" : {
    "category" : "Sports",
    "eq" : "hdhshhajasjjs",
    "title" : "papajs"
  },
  "sjs4" : {
    "category" : "Sports",
    "eq" : "hdhs",
    "title" : "sjs"
  }
}

编辑 onDataChange:-

这是一个简单的开始

        Query searchQueryNum2 = reference.child(AddDIYFragment.DIY_CHILD).orderByChild("title").startAt("gg");
        Log.d(TAG, "query is made");
        searchQueryNum2.addListenerForSingleValueEvent(this);

和 onDataChange

    private ArrayList<Prod> list = new ArrayList<>();

    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

        for (DataSnapshot temp : dataSnapshot.getChildren()) {

            list.add(temp.getValue(Prod.class));
            Log.d(TAG, "list added something " + list.get(list.size() - 1));

        }
}

编辑 我将孩子设置为按 startat "gg" 排序,如您在顶部看到的,我们有 gg 但它也返回(hdhshs、java、jsjsjsjs、papajs、sjs 等)

【问题讨论】:

  • “返回错误值”是什么意思?期望值是多少?请将您的数据库结构添加为 JSON 文件或至少作为屏幕截图。
  • @AlexMamo 谢谢,我添加了 JSON 树示例
  • “返回错误值”是什么意思?期望值是多少?
  • @AlexMamo 我的意思是当我想要一个特定的标题来搜索它时它不会返回它返回错误的标题,就像你输入 reference.child(AddDIYFragment.DIY_CHILD).orderByChild("title").startAt(text); 它返回 null 或者不是你想要的对象
  • 向我们展示一个不使用变量的具体示例。使用硬编码值。

标签: android firebase-realtime-database


【解决方案1】:

您的查询是:

...orderByChild("title").startAt("gg")

这由 Firebase 通过以下方式执行:

  1. 按标题对引用的所有子项进行排序。
  2. 查找标题以gg 开头的孩子,如果没有孩子以gg 开头,则查找其后的第一个。
  3. 从那里开始返回结果,直到我们用完结果。

我认为您正在寻找 startsWith(...) 运算符,Firebase 本身没有,但可以通过组合 startAt() 和 endAt() 轻松创建。

...orderByChild("title").startAt("gg").endAt("gg\uf8ff")

这样,您将在上面的配方中添加一个额外的步骤:

  1. 一旦标题大于gg\uf8ff,就停止返回结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-26
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    相关资源
    最近更新 更多