【问题标题】:Tring to populate a list view using a Firebase Query to create a leaderboard使用 Firebase 查询填充列表视图以创建排行榜
【发布时间】: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 的样子。

Database tree

在 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


【解决方案1】:

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

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

应该:

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

为了确保您以正确的方式订购它,您必须颠倒顺序,而不是:

limitToFirst(10);

应该是:

limitToLast(10):

【讨论】:

    猜你喜欢
    • 2023-03-25
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 2020-05-26
    • 1970-01-01
    • 2021-03-09
    相关资源
    最近更新 更多