Eri*_*ina 7 android nosql firebase firebase-realtime-database
我是Firebase和NoSQL的新手.我有一个Android演示,有一个城市自动填充文本字段,我想在输入时填充我的Firebase数据库中的城市.
{ "cities":{
"Guayaquil":true,
"Gualaceo":true,
"Quito":true,
"Quevedo":true,
"Cuenca":true,
"Loja":true,
"Ibarra":true,
"Manta":true
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我到目前为止所拥有的.
如何从以字母开头的数据库城市(键盘输入)中检索?如果我开始输入"G",我想收到"Guayaquil"和"Gualaceo".
如果我使用orderByValuealways总是返回一个空快照.
如果我使用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());
}
Run Code Online (Sandbox Code Playgroud)
注意:如果您可以推荐更好的数据结构,欢迎您.
@NicholasChen发现了这个问题.但是这是你使用3.x SDK实现的方式:
DatabaseReference cities = databaseRef.child("cities")
Query citiesQuery = cities.orderByKey().startAt(input).endAt(input+"\uf8ff");
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());
}
Run Code Online (Sandbox Code Playgroud)
通过从用户输入开始并以用户输入开头的最后一个字符串结束,您将获得所有匹配的项目
对于相对较短的项目列表,Ryan的方法也可以正常工作.但上面的Firebase查询将过滤服务器端.
我刚刚运行了这段代码:
DatabaseReference databaseRef = FirebaseDatabase.getInstance().getReference("39714936");
String input = "G";
DatabaseReference cities = databaseRef.child("cities");
Query citiesQuery = cities.orderByKey().startAt(input).endAt(input + "\uf8ff");
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());
}
System.out.println(cities);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
Run Code Online (Sandbox Code Playgroud)
并打印:
真正
真正
所以清楚地匹配两个城市.
随意测试我的数据库:https://stackoverflow.firebaseio.com/39714936
| 归档时间: |
|
| 查看次数: |
15766 次 |
| 最近记录: |