【问题标题】:Display data from Firebase in descending order in ListView [duplicate]在 ListView 中按降序显示来自 Firebase 的数据 [重复]
【发布时间】:2017-04-26 09:54:37
【问题描述】:

我正在使用 Firebase 数据库。我的“用户”数据如下所示:

Users {
  "38NFjDwCPAdkdvbzLb1VkFeaBIV2" : {
    "points" : 10,
    "userEmail" : "abc@hotmail.com",
    "userName" : "Tom"
  },
  "pH3HWzu9SVbW56jwqCb55hHryAD2" : {
    "points" : 17,
    "userEmail" : "xyz@hotmail.com",
    "userName" : "Jerry"
  }
}

现在我想根据用户的积分以降序显示用户。我可以使用orderByChild("points"),但这只会按升序显示列表。

这就是我现在正在做的事情:

public class Leaderboards extends AppCompatActivity {

    private ListView leaderboardsList;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_leaderboards);

        leaderboardsList = (ListView) findViewById(R.id.leaderboardList);

        DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();

        DatabaseReference userRef = rootRef.child("Users");

        DatabaseReference carsRef = rootRef.child("Card");
        Query qUserRef = userRef.orderByChild("points");

        FirebaseListAdapter<User_DB> firebaseListAdapter = new FirebaseListAdapter<User_DB>(this, User_DB.class, android.R.layout.simple_list_item_1, qUserRef ) {
            @Override
            protected void populateView(View v, User_DB model, int position) {

                String points = String.valueOf(model.getPoints());
                ((TextView)v.findViewById(android.R.id.text1)).setText(points);

            }
        };

        leaderboardsList.setAdapter(firebaseListAdapter);
    }

}

为了根据每个用户的积分以降序显示我的列表,我对上述代码进行了哪些更改?

【问题讨论】:

  • 没有内置方法按降序获取结果。常见的解决方案是保留一个带有反转值的额外属性(即negativeScore)或进行反转客户端(鉴于列表显示在移动设备上,它不应该很长)。见stackoverflow.com/questions/34156996/…
  • 嘿,谢谢你的想法。我会尝试按照您所说的制作另一个带有负分的属性。

标签: android listview firebase firebase-realtime-database


【解决方案1】:

您需要为每个数据设置优先级并使用orderByPriority 函数。
因为在 Firebase 上,我们不能将降序或升序设置为排序。

【讨论】:

  • orderByChild 呢?
  • orderByChild 始终按升序排序。
  • 无论您是orderByKeyorderByValueorderByChild 还是orderByPriority(),Firebase 中的所有排序都是递增的。见firebase.google.com/docs/database/android/…。没有理由再使用orderByPriority()。见stackoverflow.com/a/31578297/209103
  • 我在想也许我可以将所有这些数据存储在一个数组列表中,然后对其进行排序并显示在我的列表视图中。有人知道我该怎么做吗?
猜你喜欢
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 2021-07-10
  • 2021-02-27
  • 2020-07-18
  • 2015-12-08
  • 1970-01-01
相关资源
最近更新 更多