Tring使用Firebase Query填充列表视图以创建排行榜



使用Query时,我似乎无法填充列表视图。我可以通过传递所有用户来填充它,尽管我正在尝试创建一个排行榜,所以我需要订购这些用户。

当我使用以下代码时,列表视图填充良好,但当然没有排序:

database = FirebaseDatabase.getInstance().getReference().child("Users");
listview = (ListView) findViewById(R.id.Leaderboard);
adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1,leaderboardlist);
listview.setAdapter(adapter);
database.addChildEventListener(new ChildEventListener()

然后我尝试了这个代码来订购:

database = FirebaseDatabase.getInstance().getReference().child("Users");
listview = (ListView) findViewById(R.id.Leaderboard);
adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1,leaderboardlist);
listview.setAdapter(adapter);
Query queryRef = database.orderByValue().limitToFirst(10);
queryRef.addChildEventListener(new ChildEventListener()

这返回了相同的列表视图(已填充但没有顺序(。我试图根据用户的得分值对他们进行排序,所以我将查询更改为:

Query queryRef = database.child("score").orderByValue().limitToFirst(10);

尽管当我这样做时,它似乎不起作用,但列表视图不会填充。

它不允许我导出数据库的JSON文件,所以只能附加树来帮助您了解uUser的外观。

数据库树

在ChildListener内部,我有这个:

@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s)
{
String user = dataSnapshot.getValue(User.class).toString();
leaderboardlist.add(user);
adapter.notifyDataSetChanged();
}

所以我不太确定我哪里出了问题,也不太确定如何修复这个

如果有人想知道我最终解决了这个问题,

正确的查询方式不是按值排序,而是按子项排序:

例如:代替

Query queryRef = database.child("score").orderByValue().limitToFirst(10);

它应该:


Query queryRef = database.orderByChild("score").limitToFirst(10);

我现在的问题是,它现在正在反向订购,

我试着从改过来

limitToFirst(10);

limitToLast(10):

但这并没有改变什么?

正确的查询方式不是按值排序,而是按子级排序:例如:代替

Query queryRef = database.child("score").orderByValue().limitToFirst(10);

它应该:

Query queryRef = database.orderByChild("score").limitToFirst(10);

为了确保你以正确的方式订购,你必须颠倒订单,而不是:

limitToFirst(10);

应该是:

limitToLast(10):