【问题标题】:Firebase real_time database query doesn't workFirebase 实时数据库查询不起作用
【发布时间】:2017-11-21 19:35:34
【问题描述】:

我在我的 Android 项目中使用 Firebase 实时数据库。我的数据库方案如下:

我想获得最好的 10 分。我的查询:

   val query = reference.child("users").orderByChild("score").limitToFirst(10)
    query.addValueEventListener(object : ValueEventListener {
            override fun onCancelled(p0: DatabaseError) {}
            override fun onDataChange(dataSnapshot: DataSnapshot) {
                    dataSnapshot.children.forEach {
                        val score: String = it.child(Constants.scoreKey).value as String    
                        Log.i(TAG,"score:"+score)               
                    }
            }
        })

我希望在 logcat 上看到最好的 10 个分数。但它没有。我看到随机分数。 我的错误是什么?

【问题讨论】:

  • 字段 score 是一个字符串,因此排序是按字典顺序完成的,而不是按数字顺序。这是否解释了看似“随机”的顺序?

标签: android firebase firebase-realtime-database kotlin


【解决方案1】:

为了解决这个问题,将score字段的类型从String更改为intlong,否则订单完成lexicographically

Firebase 中没有运算符,据我所知,在其他数据库中也没有允许您更改此行为的运算符。相反,您需要修改数据以获得您想要的行为。如果您想使用 String 值,请在按字典顺序排序时按照您需要的顺序存储这些值。对于数字,您可以通过用零填充它们来实现:

举个例子:

  • "0131" //前面加零
  • "0132" //前面加零
  • ......
  • “1308”
  • “1309”
  • “1310”
  • “1311”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 2020-08-18
    • 2021-11-13
    • 2021-05-10
    • 2019-07-31
    • 1970-01-01
    相关资源
    最近更新 更多