我是Firebase和NoSQL的新手。我有一个Android演示,其中有一个城市自动填充文本字段,我想在输入时填充Firebase数据库中的城市。从Android中的Firebase实时数据库检索数据
{ "cities":{
"Guayaquil":true,
"Gualaceo":true,
"Quito":true,
"Quevedo":true,
"Cuenca":true,
"Loja":true,
"Ibarra":true,
"Manta":true
}
}
这是我到目前为止。
如何从数据库中以字母(键盘输入)开头的城市检索?如果我开始输入“G”,我想收到“瓜亚基尔”和“Gualaceo”。
如果我使用orderByValue
总是返回一个空的快照。
如果我用orderByKey
返回整个列表。
Query citiesQuery = databaseRef.child("cities").startAt(input).orderByValue();
citiesQuery.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List<String> cities = new ArrayList<String>();
for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
cities.add(postSnapshot.getValue().toString());
}
注:如果你能推荐一个更好的数据结构,欢迎您。
多大将城市这个数据库是什么?您的应用程序是否可以将数据库中的数据读入本地副本(如某种数组),然后使用本地逻辑在打字时仅显示适当的值? – Ryan
最初它将在10左右,但可以增加到100.我希望这个功能是“在线”的,所以我可以添加新的城市,而不需要在本地存储 –
哦,这很好。就处理器和网络而言,100个小字符串实际上什么都不是,所以它肯定会很快。让我通过本地存储来澄清我的意思。我的意思是在运行时在内存中,这就是全部。我不是说要在设备存储器或类似的东西中存储一个副本。我的意思是,将城市读入数组,然后使用该数组显示数据。当数据库发生变化时,您可以非常轻松地立即更新阵列,但我怀疑它会经常更改。查看我的答案,以获得更多关于我在想什么的解释。 – Ryan