我很难弄清楚如何查询我的Firebase数据库。这是它的样子。
这是我的代码:
//RETRIEVE
public ArrayList<Spacecraft> retrieve()
{
String myUserId = acct.getId();
//db.addChildEventListener(new ChildEventListener() {
db.child("/users/uid").equals(myUserId)
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
//fetchData(dataSnapshot);
fetchData(dataSnapshot);
adapter.notifyDataSetChanged();
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
fetchData(dataSnapshot);
adapter.notifyDataSetChanged();
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
return spacecrafts;
}
因此db.addChildEventListener
将检索整个数据库。但我想要的只是为uid等于String myUserId的用户检索数据。我希望按级别按升序排序。我已经阅读了文档并观看了视频,但我无法弄清楚。任何帮助将不胜感激。
答案 0 :(得分:2)
Query query = db.child("users").orderByChild("uid").equalTo("myUserId");
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot userSnapshot: snapshot.getChildren()) {
System.out.println("User "+userSnapshot.child("uid").getValue());
}
}
...
但是如果您经常通过UID访问数据,那么您将重组数据库以将所有用户存储在他们自己的UID下:
users
myUserId
Level: 2
NumCorrect: 8
然后您可以使用以下内容读取数据:
db.child("users/myUserId").addValueEventListener(new ValueEventListener() {
public void onDataChange(DataSnapshot snapshot) {
fetchData(dataSnapshot);
}
有关Firebase查询的详情,请参阅Firebase documentation on sorting and filtering data。由于您是NoSQL新手,我还建议您阅读NoSQL data modeling并查看Firebase for SQL developers。
答案 1 :(得分:0)
您可以反转阵列列表
ArrayList<UserModel> user_list = new ArrayList<>();
for (DataSnapshot snapshot :dataSnapshot.getChildren()) {
UserModel userModel = snapshot.getValue(UserModel.class);
user_list.add(userModel);
Collections.reverse(user_list);
}