Firebase数据库retreive收藏列表

时间:2017-10-02 00:24:09

标签: android firebase firebase-realtime-database

这是我的firebase数据库json:

{
  "trucks" : {
    "-KvLTRmYdJKuYKZfila6" : {
      "busiHours" : "월~금 09:00-22:00 강남역",
      "imgUrl" : "https://firebasestorage.googleapis.com/v0/b/movetodiner.appspot.com/o/trk11.png?alt=media&token=7971b439-7321-4496-bf7d-2564fa799f53",
      "starCount" : 1,
      "stars" : {
        "FJB7BWTdlyfCdzXJN4pwmSQWa1E3" : true
      },
      "truckDes" : "즉석 츄러스 전문점",
      "truckName" : "스윗 츄러스",
      "truckNo" : "1"
    },
    "-KvLTo5_eWVWxSAhemK4" : {
      "busiHours" : "월~일 09:00-19:00 홍대입구역",
      "imgUrl" : "https://firebasestorage.googleapis.com/v0/b/movetodiner.appspot.com/o/trk11.png?alt=media&token=7971b439-7321-4496-bf7d-2564fa799f53",
      "starCount" : 1,
      "stars" : {
        "FJB7BWTdlyfCdzXJN4pwmSQWa1E3" : true
      },
      "truckDes" : "수제 케밥을 알고싶니?",
      "truckName" : "오빠 손맛",
      "truckNo" : "2"
    },
    "-KvLTxrGs9tAs3w5jJVV" : {
      "busiHours" : "화, 목, 토,일 10:00-23:00 이태원",
      "imgUrl" : "https://firebasestorage.googleapis.com/v0/b/movetodiner.appspot.com/o/trk11.png?alt=media&token=7971b439-7321-4496-bf7d-2564fa799f53",
      "starCount" : 0,
      "truckDes" : "백종원이 추천한다!",
      "truckName" : "도깨비 핫도그",
      "truckNo" : "3"
    },
    "-KvLU4ViXM78aH_thFjF" : {
      "busiHours" : "ggg",
      "imgUrl" : "https://firebasestorage.googleapis.com/v0/b/movetodiner.appspot.com/o/trk11.png?alt=media&token=7971b439-7321-4496-bf7d-2564fa799f53",
      "starCount" : 2,
      "stars" : {
        "FJB7BWTdlyfCdzXJN4pwmSQWa1E3" : true,
        "Jm7JQQBGtzQgLUBgcEutB3O6YAV2" : true
      },
      "truckDes" : "6~7",
      "truckName" : "nonono",
      "truckNo" : "4"
    },
    "-KvLUCR-pBjQot6R1Cj6" : {
      "busiHours" : "TT",
      "imgUrl" : "https://firebasestorage.googleapis.com/v0/b/movetodiner.appspot.com/o/trk11.png?alt=media&token=7971b439-7321-4496-bf7d-2564fa799f53",
      "starCount" : 0,
      "truckDes" : "8~10",
      "truckName" : "Twice",
      "truckNo" : "5"
    }
  }
}

我想了解最喜欢的List。

查询:从卡车中选择*星号(包含)FJB7BWTD ~~;

F7B7是我的uid。

如果用户点击收藏夹按钮,它将在星空中生成uid。

所以我想在每个物体的星星上检查我的uid。

所以我认为它需要一个查询。

但它没有用。

enter code here
    Query mQuery=database.getReference().child("trucks").orderByChild("stars").equalTo(auth.getCurrentUser().getUid());
    mQuery.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot postSnapshot : dataSnapshot.getChildren())
            {
                favlist.add(postSnapshot.getValue().toString());
                System.out.println(postSnapshot.getKey() + " / " +postSnapshot.getValue().toString() + " / ");
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });

程序使我的代码滑了..... ;;

如何编写代码?让我解释一下。

1 个答案:

答案 0 :(得分:2)

要实现您的目标,您需要通过添加名为favoriteList的新节点来稍微更改数据库结构。您需要这样做,因为无需下载整个trucks对象以查询数据库中最喜欢的卡车。所以你的数据库结构应如下所示:

Firebase-root
    |
    --- favoriteList
            |
            --- FJB7BWTdlyfCdzXJN4pwmSQWa1E3
            |      |
            |      --- -KvLTRmYdJKuYKZfila6: true
            |      |
            |      --- -KvLTo5_eWVWxSAhemK4: true
            |      |
            |      --- -KvLU4ViXM78aH_thFjF: true
            |
            --- Jm7JQQBGtzQgLUBgcEutB3O6YAV2
                   |
                   --- -KvLU4ViXM78aH_thFjF: true

通过这种方式,您可以通过在Firebase-root -> favoriteList -> userId

上附加一个监听器,简单地查询您的数据库,以查找属于单个用户的所有收藏卡车

创建新曲目时,您已经在使用push()方法。因此,当您生成该密钥(即我在第一辆卡车上看到的-KvLTRmYdJKuYKZfila6)时,只需将该密钥保存到这样的变量中:

String truckKey = yourRef.push().getKey();

要保存数据,请使用以下代码

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference userIdRef = rootRef.child("favoriteList").child("FJB7BWTdlyfCdzXJN4pwmSQWa1E3").child(truckKey).setValue(true);