Java 查询firebase数据库并检索有限的数据
我有一个android应用程序,它使用Java 查询firebase数据库并检索有限的数据,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我有一个android应用程序,它使用Firebase数据库Firebase数据库结构如下所示: 用户的每个子项都是不同用户的用户名 我想要什么 我的应用程序中有一个搜索字段,在该字段上附加了一个TextChangedListener。此搜索字段可用于搜索其他用户的用户名 现在,当用户在搜索字段中输入任何文本时,例如jo,我想从数据库中获取以jo开头的前20个用户名,在我的情况下,它将返回john_jj和所有其他以jo开头的用户名 相当于: SELECT username FROM tabl
Firebase
数据库<代码>Firebase数据库结构如下所示:
用户的每个子项
都是不同用户的用户名
我想要什么
我的应用程序中有一个搜索字段,在该字段上附加了一个TextChangedListener
。此搜索字段可用于搜索其他用户的用户名
现在,当用户在搜索字段中输入任何文本时,例如jo
,我想从数据库中获取以jo
开头的前20个用户名,在我的情况下,它将返回john_jj
和所有其他以jo
开头的用户名
相当于:
SELECT username
FROM table
WHERE username LIKE 'jo%'
LIMIT 20;
问题:
如何编写查询,从Firebase数据库中获取以特定字母开头的前20个用户名,如jo
?如下:
SELECT username
FROM table
WHERE username LIKE 'jo%'
LIMIT 20;
在firebase中可以是这样的:
DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("Users");
ref.orderByChild(username).startAt("jo").endAt("jo\uf8ff").limitToFirst(20).addValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot data: dataSnapshot.getChildren()){
String usernames=data.getKey();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
child(“用户”)
是表
orderByChild(用户名)
是列
startAt(“jo”).endAt(“jo\uf8ff”)
这像“jo%”吗
limitToFirst(20)
这是限制20
有关firebase中查询的更多信息,请检查以下内容:回答得好,Peter!我建议使用ChildEventListener
(或者演示如何循环DataSnapshot.getChildren()
),以确保用户以正确的顺序显示。谢谢@frankvanpoffelen!我添加了DataSnapshot.getChildren()
,键应该是用户名,因为他在其中循环。(如果我没有错的话)尝试在startAt()之后使用endAt()
。正如您在评论时所说的那样,我只看到了使用startAt(“jo”).endAt(“jo\uf8ff”)…
。\uf8ff
仅仅是unicode中的最后一个字符,因此充当末端保护。就这么做了。身体干杯!