Java 查询firebase数据库并检索有限的数据

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

我有一个android应用程序,它使用
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中的最后一个字符,因此充当末端保护。就这么做了。身体干杯!