使用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):