当前位置: 首页 > 知识库问答 >
问题:

可以根据需要手动从Firebase检索数据,如何组合查询?

萧繁
2023-03-14

我有一个Firebase实时数据库,其中有一组与谷歌地图上的位置相关的项目。所以Firebase中的每个孩子都有这样的数据结构。

-item
latitude:"5511231165654"
longitude:"516891812013216"
postalcode: "10013"
cityname: "New York"

在我的应用程序中,数据库中的每个项目,以标记的形式添加到Google地图上的相关位置。现在我认为将所有项目发送给所有用户不是一个好主意。仅向用户发送与他们相关的这些项目会更有效。这些项目是与用户位于同一区域中的一个,在这种情况下,相同的区域意味着相同的邮政编码。

为了处理这个问题,我构建了这个查询

 Query sortedByLocation = myRef.orderByChild("postalcode").equalTo(currentpostalcode);
 sortedByLocation.addListenerForSingleValueEvent(
 new ValueEventListener() {
      .
      . do something
      .
}

我从Geocoder得到了当前的邮政编码以及城市名称。现在的问题是,有时Geocoder无法解码邮政编码并为其返回null,但它总是返回城市名称。所以我将查询更改为

Query sortedByLocation = myRef.orderByChild("cityname").equalTo(currentcity);

那么,我如何组合这两个查询呢?我想这样做:

is postalcode == null than check for cityname

另一个问题是,可以在需要时手动检索数据吗?

想象一下,用户启动应用程序,应用程序现在获取与用户在同一区域的所有项目,但现在用户离开该区域并进入其他区域。

如何触发检索此新区域的新数据而无需重新启动应用程序?

共有1个答案

华泽语
2023-03-14

Firebase查询只能包含单个排序/筛选条件。

有时,您可以将多个值组合到单个属性中,以获得所需的行为。有关这方面的示例,请参阅我在此处的答案:基于firebase中的多个 where 子句进行查询

但总的来说,使用GeoFire听起来可能会更好,它使用GeoHashes(一种将经度和纬度组合成单个属性的方法)来允许根据项目到点的距离来过滤项目。请注意,目前,GeoFire for Java的更新版本仍在开发中。

 类似资料:
  • 我试图创建一个简单的程序,从用户的名字,手机号码和电子邮件地址,然后把数据在Firebase实时数据库。 有3个输入框和一个按钮,按一下就可以完成上面的操作。代码如下: 我这样设置了消防基地:

  • 问题内容: 我有这样一张table: 如果创建了新记录,并且该记录在同一天被更改了几次,则输出将成为更改后的记录的第一个和最后一个记录;如果同一天对现有记录进行了几次更改,则输出应在第一个更改和当前更改之前改变 例如:如果输入日期为2018年6月1日,则输出应如下所示; 如果输入日期为2018年6月2日,则输出应如下所示; 如果输入日期为2018年6月3日,则输出应为以下内容; 任何帮助深表感谢。

  • firebase数据库最近的更新似乎有一些变化。我的项目在firebase\u数据库:^7.0.0版本下运行良好,但在firebase数据库的更新版本中,我无法更新项目代码。 以下是v7的工作版本 firebase\u数据库^9.0.12上的同一代码出现错误。我收到的错误在`(DataSnapShot snap)async{…}上错误是 无法将参数类型“Future Function(DataSn

  • 问题内容: 我正在法国学习,所以很难找到法语教程来解决我的问题。因此,我不得不问我的问题,希望有一个令人满意的解决方案。 我的问题是我在firebase上读取数据时遇到了麻烦,并且花了三天时间。 我有这样的结构: 我已经开始编写一些代码,可以恢复密钥,但是无法恢复这些值“ nom”,“ argent”等。 问题答案: John的替代方法是使用来获取每个属性:

  • 我正在两个标记之间画一条路线,我想保存那条路线。为此,我将包含lat和lng的ArrayList保存在Firebase数据库中。但我在取回航路点时遇到了问题。我是这样插入的: 在检索数据时,我尝试执行以下操作:

  • 我如何从所有userid都未知的医院中检索所有的hospitalNames。