我正在尝试使用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上搜索这个主题,但仍然没有任何解决方案。
答案 0 :(得分:1)
我检查了startAt()文档,逻辑很混乱。但是,如果我理解它是正确的(是的,不完全确定,但要提前发布,这可能会有所帮助)。
在您第一次尝试时,起始值是“ Sucipto ”,我认为这表示的后续字词/字符串>按字典顺序排列,包括在内。正如您在结果中看到的那样,在参考中的所有其他孩子中, Eko 和 Fitri 没有归还,因为按字母顺序排列,'S'远远超过'F'和'E'。
您可以验证此尝试添加其他值,让我们说“Sucipta”包含在内。如果再次运行查询,startAt()
的值为“Sucipto”,则返回值仍然不包括“Sucipta”,因为“Sucipta”的最后一个字母更高(或者alpahabetically first(a,b,c。 ...)抱歉,我找不到一个好词。)
我认为这可能有所帮助,您可以查看Firebase Retrieving Data文档以获取更详细的说明。在一个例子中,他们也使用了一个字母而不是一个数字。