【发布时间】:2019-11-12 02:11:57
【问题描述】:
当我使用查询时,我似乎无法填充列表视图。我可以通过传入所有用户来很好地填充它,尽管我正在尝试创建一个排行榜,所以我需要对这些用户进行排序。
当我使用以下代码时,列表视图可以很好地填充,但当然不是有序的:
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):
但这并没有改变什么?
【问题讨论】:
-
嗨,克里斯,欢迎来到 SO。您不应该通过编辑问题文本来回答您的问题 - 您应该将其作为 answer 进行回答(然后在 2 天宽限期之后接受该答案),以便未来的读者可以看到它.如果您有新问题,请提出新问题。
-
但是,我认为这应该是您第二个问题的答案:stackoverflow.com/questions/34156996/… -- 请注意,由于您的数据库中有 8 个项目,
limitToFirst(10)和limitToLast(10)将返回完全相同结果。 -
嗨@robsiemb 谢谢你,我的数据库中现在有 11 个,它确实显示了前 10 个消除了最后一个,但是在显示时它总是按从最低到最高的顺序限制到第一(10)和limitToLast(10)。虽然这不是原来的问题,所以已经发布了原来问题的答案
-
Firebase 仅按升序排序。请参阅我为解决方案链接的问题。
标签: java firebase listview firebase-realtime-database