【问题标题】:It is possible to retrieve data from Firebase manually at need and how combine querys?可以根据需要手动从 Firebase 检索数据,以及如何组合查询?
【发布时间】:2026-01-25 13:25:01
【问题描述】:

我有一个 Firebase 实时数据库,其中包含一组与 Googlemap 上的位置相关的项目。所以 Firebase 中的每个子节点都有这样的数据结构。

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

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

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

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

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

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

那么我该如何组合这两个查询呢?我想做这样的事情:

is postalcode == null than check for cityname

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

假设用户启动应用,应用现在获取与用户在同一区域的所有项目,但现在用户离开该区域并进入另一个区域。

如何在不重新启动应用程序的情况下触发检索这个新区域的新数据?

【问题讨论】:

    标签: java android google-maps firebase-realtime-database


    【解决方案1】:

    Firebase 查询只能包含一个排序/过滤条件。

    有时您可以将多个值组合到一个属性中以获得您想要的行为。例如,请在此处查看我的答案:Query based on multiple where clauses in firebase

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

    【讨论】: