java - 即使引用检索数据,Firebase 查询也无法在 Android 上运行

标签 java android firebase firebase-realtime-database

我正在尝试过滤我的 Firebase 数据,我的数据集很复杂,但这里有一个示例。我能够很好地检索数据,但无法使用 Firebase 查询进一步过滤该数据。这是一个示例数据集:

enter image description here

这是我的查询:

private double locStart;
private double locEnd;
Firebase mRef;
Firebase mRef1;

    mRef = new Firebase("https://test.firebaseio.com/");
mRef1 = mRef.child("test");

    final Intent intent = getIntent();
    final Inputs inputs = (Inputs) intent.getSerializableExtra("inputs");

    locStart = inputs.getLocLat() - 0.008983;
    locEnd = inputs.getLocLat() + 0.008983;

    Query filterData = mRef1.orderByChild("locLat").startAt(locStart).endAt(locEnd);

    filterData.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Match matchd = dataSnapshot.getValue(Match.class);
            Offer.setText(matchd.getfbName());
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {

        }
    });

引用 mRef1 完美地检索数据,只有当我对其应用查询时,它才会检索空值,数据肯定与查询匹配,我什至对值进行了硬编码,但这似乎也不起作用。

我是否缺少应该在 Firebase 控制台上设置的内容?我确实设置了一个索引,并解决了日志中的一条警告,该警告建议我在字段上设置一个索引,这意味着 Firebase 也能识别该字段和索引。

最佳答案

Firebase 查询返回列表中子节点的子集。

因此,如果您有位置列表:

locations: {
  location1: { lat: 42.010185, lon: -33.010185 },
  location2: { lat: -11.19645, lon:  52.461219 },
  location3: { lat: 33.14518,  lon: -11.128746 }
}

您可以使用以下方式查询位置:

ref.child("locations").orderByChild("lat").startAt(-12.0).endAt(-10)

您的数据缺少一个级别:您正在查询 test,但缺少 location1location2location3 我在其下的级别。如果添加这样的级别,您的查询将能够匹配子级。

您的下一个问题可能是 Firebase 数据库查询只能对单个属性进行排序/过滤。这意味着对于地理查询,您目前只能按经度或纬度进行过滤,这只能实现一半的地理查询。我建议您查看GeoFire ,这是我们的地理查询库。它将每个项目的纬度和经度组合成一个 geohash值,然后可以查询。

关于java - 即使引用检索数据,Firebase 查询也无法在 Android 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41569846/

相关文章:

JavaFX - JavaFX-Fallback-Class 的目的是什么?

java - ZeroMQ+Protobuf 的替代品(ZeroMQ 对 Java 来说已经死了吗?)

java - 在哪里创建 LibGDX And​​roid Studio 的 asset 文件夹

java - 从 Android 创建新的 Google Drive 文档

java - 如何将增量发票编号放入DatabaseReference

javascript - 如何在 Chrome 扩展中隐藏 Firebase 凭据?

java - 从 Firebase 检索数据并在 TextView 中输出

java - 如何在 java 中生成所有可能的 64 位随机值?

c# - java中有类似LINQ的实现吗?

android - 在 ListView 中单击复选框时,如何使按钮栏从底部滑入?