为了账号安全,请及时绑定邮箱和手机立即绑定

orderByChild 查询不适用于 addListenerForSingleValueEvent

orderByChild 查询不适用于 addListenerForSingleValueEvent

拉莫斯之舞 2023-09-20 16:23:56
我尝试按子值“月”对数据库进行排序,但 orderByChild 不起作用。当我使用 onChildEventListener 而不是 addListenerForSingleValueEvent 时它可以工作但我不想使用 childEventListener这是我的数据库"Stats" : {    "2019" : {      "YxdZZHGy3rW4xdjORfk2i5mFRYG2" : {        "August" : {          "Weight" : {            "Body_Fat" : "29",            "Month" : 8,            "Weight" : "68"          }        },        "October" : {          "Weight" : {            "Body_Fat" : "29",            "Month" : 10,            "Weight" : "67"          }        },        "September" : {          "Weight" : {            "Body_Fat" : "28.5",            "Month" : 9,            "Weight" : "65.5"          }        }      }    }},这是java代码 userStatsDatabase.addListenerForSingleValueEvent(new ValueEventListener() {        @Override        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {            if (dataSnapshot.exists()) {                for (DataSnapshot ds : dataSnapshot.getChildren()) {                    Query query = userStatsDatabase.child(ds.getKey()).child("Weight").orderByChild("Month").limitToFirst(12);                    query.addListenerForSingleValueEvent(new ValueEventListener() {                        @Override                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {                            if (dataSnapshot.exists()) {                                Map<String, Object> map = (Map<String, Object>) dataSnapshot.getValue();                                pastMonthsBodyFat = Float.parseFloat(map.get("Body_Fat").toString());                                pastMonthsWeight = Float.parseFloat(map.get("Weight").toString());                                pastWeightList.add(pastMonthsWeight);                                pastBodyFatList.add(pastMonthsBodyFat);                                Toast.makeText(Stats.this, map.get("Month").toString(), Toast.LENGTH_SHORT).show();                            }Toast 应该按顺序打印月份值 8,9,10,但它打印的是值 8,10,9
查看完整描述

2 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

如果userStatsDatabase指向此 JSON(对于特定用户):


  {

    "August" : {

      "Weight" : {

        "Body_Fat" : "29",

        "Month" : 8,

        "Weight" : "68"

      }

    },

    "October" : {

      "Weight" : {

        "Body_Fat" : "29",

        "Month" : 10,

        "Weight" : "67"

      }

    },

    "September" : {

      "Weight" : {

        "Body_Fat" : "28.5",

        "Month" : 9,

        "Weight" : "65.5"

      }

    }

  }

然后你可以按以下顺序获得结果Month:


Query query = userStatsDatabase..orderByChild("Weight/Month");

query.addListenerForSingleValueEvent(new ValueEventListener() {

  @Override

  public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

    for (DataSnapshot monthSnapshot: dataSnapshot.getChildren()) {

      System.out.println(monthSnapshot.getKey()); // August, September, October

      System.out.println(monthSnapshot.child("Weight/Month").getValue(Long.class)); // 8, 9, 10

    }

  }

  ...


查看完整回答
反对 回复 2023-09-20
?
慕娘9325324

TA贡献1783条经验 获得超4个赞

我放弃了使用 Firebase 查询对数据进行排序,我确信我的代码没有任何问题,无论如何,我决定使用 Collections.sort 将数据添加到 arrayList“之后”对其进行排序,并且它有效。谢谢


PS,如果有人知道为什么我的 firebase 查询不起作用,我仍然想知道原因:S


这是代码,以防其他人需要对 arrayList 中的数据进行排序


//sort the item  to show months in ascending order

Collections.sort(items, new Comparator<PastMonthsWeightStats>(){

    @Override

    public int compare(PastMonthsWeightStats obj1, PastMonthsWeightStats obj2) {

        // ## Ascending order

        // return obj1.firstName.compareToIgnoreCase(obj2.firstName); // To compare string values

        //return Float.valueOf(obj1.getMonthNumber()).compareTo(Float.valueOf(obj2.getMonthNumber())); // To compare integer values


        // ## Descending order

        // return obj2.firstName.compareToIgnoreCase(obj1.firstName); // To compare string values

        return Integer.valueOf(obj2.getMonthNumber()).compareTo(Integer.valueOf(obj1.getMonthNumber())); // To compare integer values

    }

});   


查看完整回答
反对 回复 2023-09-20
  • 2 回答
  • 0 关注
  • 57 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信