困惑关于Firebase startAt()

时间:2016-05-19 00:29:00

标签: android firebase firebase-realtime-database

我正在尝试使用firebase制作Android应用,我希望使用startAt()在firebase上使用搜索功能。但结果让我感到困惑。

我有一些像这样的firebase数据。

{
  "siswa" : {
    "100" : {
      "id" : 100,
      "nama" : "Sucipto"
    },
    "101" : {
      "id" : 101,
      "nama" : "Tomo"
    },
    "102" : {
      "id" : 102,
      "nama" : "Fitri"
    },
    "103" : {
      "id" : 103,
      "nama" : "Sumini"
    },
    "104" : {
      "id" : 104,
      "nama" : "Eko"
    },
    "106" : {
      "id" : 106,
      "nama" : "Sulastri"
    }
  }
}

我的示例查询

// Setup Firebase
final FirebaseDatabase database = FirebaseDatabase.getInstance();
// Firebase siswa ref
final DatabaseReference siswaRef = database.getReference("siswa");
// Query
Query suciptoQuery = siswaRef.orderByChild("nama").startAt("Sucipto");

结果:

 D/Query Sucipto: Nama : Sucipto
 D/Query Sucipto: Nama : Sulastri
 D/Query Sucipto: Nama : Sumini
 D/Query Sucipto: Nama : Tomo

我正在尝试另一个测试查询

Query suciptoQuery = siswaRef.orderByChild("nama").startAt("Su");

结果:与上述相同

另一个问题:

Query suciptoQuery = siswaRef.orderByChild("nama").startAt("Tomo");

Query suciptoQuery = siswaRef.orderByChild("nama").startAt("To");

结果:

D/Query Sucipto: Nama : Tomo

我在SO上搜索这个主题,但仍然没有任何解决方案。

1 个答案:

答案 0 :(得分:1)

我检查了startAt()文档,逻辑很混乱。但是,如果我理解它是正确的(是的,不完全确定,但要提前发布,这可能会有所帮助)。

在您第一次尝试时,起始值 Sucipto ,我认为这表示的后续字词/字符串>按字典顺序排列,包括在内。正如您在结果中看到的那样,在参考中的所有其他孩子中, Eko Fitri 没有归还,因为按字母顺序排列,'S'远远超过'F'和'E'。

您可以验证此尝试添加其他值,让我们说“Sucipta”包含在内。如果再次运行查询,startAt()的值为“Sucipto”,则返回值仍然不包括“Sucipta”,因为“Sucipta”的最后一个字母更高(或者alpahabetically first(a,b,c。 ...)抱歉,我找不到一个好词。)

我认为这可能有所帮助,您可以查看Firebase Retrieving Data文档以获取更详细的说明。在一个例子中,他们也使用了一个字母而不是一个数字。