首页 > 解决方案 > 如何在firebase中获取孩子的唯一密钥

问题描述

我是 Firebase 的新手,所以我有一个场景,我必须设置一个检查,如果某个酒店已经存在于 FavouriteHotels 节点中,那么这必须证明该酒店已经存在于 FavouriteHotels 节点中,否则只需存储点击的酒店。就像在这段代码中一样。

final String favHotel_Id = myRef.push().getKey();
                            myRef.child("Users").child(mUser.getUid())
                                    .addListenerForSingleValueEvent(new ValueEventListener() {
                                        @Override
                                        public void onDataChange(@NonNull DataSnapshot snapshot) {
                                            for (DataSnapshot userSnapshot : snapshot.getChildren()) {
                                                if (!userSnapshot.child("FavouriteHotels").exists()){
                                                    Log.d(TAG, "onDataChange: "+userSnapshot.getChildren());
                                                    if (Objects.equals(hotelArrayList.get(position).getHotelName(), userSnapshot.child("Name").getValue() )) {
                                                        Toast.makeText(mContext, "Already saved to favourite hotels", Toast.LENGTH_SHORT).show();
                                                    } else {
                                                        if (favHotel_Id != null) {
                                                            myRef.child("Users").child(mUser.getUid()).child("FavouriteHotels").child(favHotel_Id).child("Name").setValue(hotelArrayList.get(position).getHotelName());
                                                            myRef.child("Users").child(mUser.getUid()).child("FavouriteHotels").child(favHotel_Id).child("Image").setValue(hotelArrayList.get(position).getImageID());
                                                            myRef.child("Users").child(mUser.getUid()).child("FavouriteHotels").child(favHotel_Id).child("rating").setValue(hotelArrayList.get(position).getHotelRating());
                                                            myRef.child("Users").child(mUser.getUid()).child("FavouriteHotels").child(favHotel_Id).child("Price").setValue(hotelArrayList.get(position).getHotelPrice());
                                                        }
                                                    }
                                                }else {
                                                    Toast.makeText(mContext, "No Data Found", Toast.LENGTH_SHORT).show();
                                                }
                                            }
                                        }

                                        @Override
                                        public void onCancelled(@NonNull DatabaseError error) {

                                        }
                                    });

我要提到的一件事是,我正在从 ArrayList 中保存这个酒店项目及其属性

if (Objects.equals(hotelArrayList.get(position).getHotelName(), userSnapshot.child("Name").getValue() )) {
                                                        Toast.makeText(mContext, "Already saved to favourite hotels", Toast.LENGTH_SHORT).show();
                                                    } else {
                                                        if (favHotel_Id != null) {
                                                            myRef.child("Users").child(mUser.getUid()).child("FavouriteHotels").child(favHotel_Id).child("Name").setValue(hotelArrayList.get(position).getHotelName());
                                                            myRef.child("Users").child(mUser.getUid()).child("FavouriteHotels").child(favHotel_Id).child("Image").setValue(hotelArrayList.get(position).getImageID());
                                                            myRef.child("Users").child(mUser.getUid()).child("FavouriteHotels").child(favHotel_Id).child("rating").setValue(hotelArrayList.get(position).getHotelRating());
                                                            myRef.child("Users").child(mUser.getUid()).child("FavouriteHotels").child(favHotel_Id).child("Price").setValue(hotelArrayList.get(position).getHotelPrice());
                                                        }
                                                    }

我想获取以圆圈突出显示的酒店的唯一键,并检查酒店名称,如果hotelArrayList.get(position).getHotelName(), userSnapshot.child("Name").getValue() 然后向我展示这家酒店已经存在于数据库中的祝酒词。

这是我的 Firebase 数据库

标签: androidfirebasefirebase-realtime-databasearraylist

解决方案


你可以像这样得到按键。

Query query = FirebaseDatabase.getInstance().getReference("your node path");
 query.addListenerForSingleValueEvent(new ValueEventListener() {
   @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
    for (DataSnapshot snapshot: dataSnapshot.getChildren()) {
        String key = snapshot.getKey();
        Log.i(TAG,key);
    }
}

推荐阅读