【问题标题】:Firestore - Orderby DescendingFirestore - 按降序排序
【发布时间】:2018-10-20 15:33:59
【问题描述】:

在我的 Firestore 数据库中,我有字段索引号,数据类型是字符串,但他的数据是数字,例如 1、2、3 等等。

collectionReference
     .orderBy("indexNo", Query.Direction.DESCENDING)

输出到9点还可以,9点之后,即10、11、12,数据显示为1、10、11、12、2、3等。

请指导我解决它,因为这些数字将决定卡片视图项目在回收站视图中的排列。

谢谢...

【问题讨论】:

    标签: java android firebase google-cloud-firestore


    【解决方案1】:

    如果您的indexNo 属性的数据类型是字符串类型,并且如果您想使用Query.Direction.DESCENDING 对结果进行排序,则结果将不是预期的结果,因为当您对字符串进行排序时,结果是有序的按字典顺序。有两种方法可以解决此问题。第一个是将属性的数据类型从 String 更改为 number,我个人推荐这样做。

    这是数字的正常顺序:

    • 1308
    • 1309
    • 1310
    • 1311

    这是字符串的正常顺序:

    • “1308”
    • “1309”
    • “131”
    • “1310”

    第二种方法是修改数据以获得您想要的行为。对于数字,您可以通过用零填充它们来实现,如下例所示:

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

    【讨论】:

      【解决方案2】:

      由于数据类型是字符串,因此排序是字典顺序的。把数字想象成字母。 0 = A, 1 = B, 2 = C... 在比较 9 和 10 时,可以将其想象为比较单词“I”和“BA”。在字典中,您希望哪个首先出现?

      【讨论】:

      • 感谢您的回答,我知道,但我需要修复它。 Array 在 Adapter 中声明为 {private ArrayList IndexNo = new ArrayList ();},请指导声明为 Integer。我想那么只有我的问题会得到解决。谢谢。
      【解决方案3】:

      最好将数据类型从字符串更改为整数。我做到了。 谢谢你的支持。

      【讨论】:

      • 这正是我在回答中所推荐的。
      猜你喜欢
      • 2021-02-20
      • 2020-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多