【问题标题】:Data is not retrieving from the firebase数据未从 Firebase 中检索
【发布时间】:2022-01-27 23:19:50
【问题描述】:

为什么我没有得到数据,即使我已经明确指出了我对那个孩子的那个孩子的引用

我的目标是:

首先,检查客户是否在 RoomsToCustomer 表中预订了特定房间,如果它是真的,则转到第二个检查,即检查房间名称是否仍然存在于 Rooms 表中,如果它是真的,然后从那里检索所有内容,但是问题是它似乎根本没有检索数据,我不知道为什么。

@Override
    protected void onBindViewHolder(@NonNull @NotNull CustomerBookedRoomAdapter.myViewHolder holder, int position, @NonNull @NotNull RoomDataForAdapter model) {

        roomnameunderCustomerBooked = model.getRoomname();
        dataReferenceForCUSTBOOKEDADPT = FirebaseDatabase.getInstance().getReference().child("Rooms");
        dataReferenceForROOMBOOKEDBOOLEAN = FirebaseDatabase.getInstance().getReference().child("RoomsToCustomer");

        dataReferenceForROOMBOOKEDBOOLEAN.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull @NotNull DataSnapshot snapshotter) {
                if(snapshotter.child(roomnameunderCustomerBooked).child(usernameFGS).equals(true)){
                    dataReferenceForCUSTBOOKEDADPT.addValueEventListener(new ValueEventListener() {
                        @Override
                        //model.getRoomname().equals(snapshot.child("roomname").exists())
                        public void onDataChange(@NonNull @NotNull DataSnapshot snapshot) {
                            if(roomnameunderCustomerBooked.equals(snapshot.child(roomnameunderCustomerBooked).exists())){

                                String updatedRoomStatus = snapshot.child(roomnameunderCustomerBooked).child("roomstatus").getValue().toString();
                                String roomType = snapshot.child(roomnameunderCustomerBooked).child("roomtype").getValue().toString();
                                String roomCapacity = snapshot.child(roomnameunderCustomerBooked).child("roomcapacity").getValue().toString();
                                String roomName = snapshot.child(roomnameunderCustomerBooked).child("roomname").getValue().toString();
                                String roomPrice = snapshot.child(roomnameunderCustomerBooked).child("roomprice").getValue().toString();
                                String roomCharacteristics = snapshot.child(roomnameunderCustomerBooked).child("roomcharacteristics").getValue().toString();
                                String roomImage = snapshot.child(roomnameunderCustomerBooked).child("imageUrl").getValue().toString();


                                holder.roomName.setText(roomName);
                                holder.roomType.setText(roomType);
                                holder.roomCapacity.setText(roomCapacity);

                                if(updatedRoomStatus.equals("Available")){
                                    String  availaFormat = "Available      ";
                                    holder.roomStatus.setText(availaFormat);
                                    holder.roomStatus.setTextColor(Color.parseColor("#226600"));
                                }else if(updatedRoomStatus.equals("Unavailable")){
                                    String  unavailaFormat = "Unavailable   ";
                                    holder.roomStatus.setText(unavailaFormat);
                                    holder.roomStatus.setTextColor(Color.parseColor("#C91818"));
                                }else if(updatedRoomStatus.equals("Maintenance")){
                                    String  umFormat = "Under\nMaintenance";
                                    holder.roomStatus.setText(umFormat);
                                    holder.roomStatus.setTextColor(Color.parseColor("#CCAA00"));

                                    //Set room "Under Maintenance" word alignment in a proper way
                                    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
                                    params.setMargins(29,-28,0,0);
                                    holder.roomStatus.setLayoutParams(params);
                                }
                                else{
                                    holder.roomStatus.setText(updatedRoomStatus);
                                    holder.roomStatus.setTextColor(Color.parseColor("#a4c639 "));
                                }
                                holder.roomPrice.setText(roomPrice);
                                holder.roomCharacteristics.setText(roomCharacteristics);
                                Picasso.get().load(roomImage).fit().into(holder.roomImage);


                            }


                        }



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

                        }
                    });




                }else{

                }

            }

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

            }
        });

请看一下我的 JSON 文件:

{
  "Customer" : {
    "johnny123" : {
      "email" : "johnny@gmail.com",
      "fullname" : "johnny",
      "password" : "Abcbc12345",
      "username" : "johnny123"
    },
    "tjing123" : {
      "email" : "jh@gmail.com",
      "fullname" : "JingHuan",
      "password" : "1",
      "username" : "tjing123"
    }
  },
  "CustomerBookedRooms" : {
    "johnny123" : {
      "CozyCone" : {
        "imageUrl" : "https://firebasestorage.googleapis.com/v0/b/finalyearprojectapplicat-8a301.appspot.com/o/RoomImageStorage%2F7b07e1ba-dabb-43b4-872b-087df75f8df6%2Fcontent%3A%2Fcom.google.android.apps.photos.contentprovider%2F0%2F1%2Fmediakey%253A%252Flocal%25253A277e0ed8-e053-48bb-8d04-3d720ba8264e%2FORIGINAL%2FNONE%2F691350677?alt=media&token=b043022c-a54a-4e2e-afa2-345d266c9c47",
        "roombedcounts" : "One Bed",
        "roomcapacity" : "2 pax",
        "roomcharacteristics" : "Cozy",
        "roomname" : "CozyCone",
        "roomprice" : "288.00",
        "roomstatus" : "Available",
        "roomtype" : "Master Room",
        "username" : "johnny123"
      },
      "TheVamps" : {
        "imageUrl" : "https://firebasestorage.googleapis.com/v0/b/finalyearprojectapplicat-8a301.appspot.com/o/RoomImageStorage%2F60ea14ef-93bf-4c04-bb75-0a95731511dd%2Fcontent%3A%2Fcom.google.android.apps.photos.contentprovider%2F0%2F1%2Fmediakey%253A%252Flocal%25253A9145b259-426c-447a-a6b0-53cbf5770ace%2FORIGINAL%2FNONE%2F558417666?alt=media&token=eb57f6e6-fd81-4d90-a485-de40885a4a43",
        "roombedcounts" : "One Bed",
        "roomcapacity" : "2 pax",
        "roomcharacteristics" : "Cozy",
        "roomname" : "TheVamps",
        "roomprice" : "499.00",
        "roomstatus" : "Available",
        "roomtype" : "Master Room",
        "username" : "johnny123"
      }
    },
    "tjing123" : {
      "CozyCone" : {
        "imageUrl" : "https://firebasestorage.googleapis.com/v0/b/finalyearprojectapplicat-8a301.appspot.com/o/RoomImageStorage%2F7b07e1ba-dabb-43b4-872b-087df75f8df6%2Fcontent%3A%2Fcom.google.android.apps.photos.contentprovider%2F0%2F1%2Fmediakey%253A%252Flocal%25253A277e0ed8-e053-48bb-8d04-3d720ba8264e%2FORIGINAL%2FNONE%2F691350677?alt=media&token=b043022c-a54a-4e2e-afa2-345d266c9c47",
        "roombedcounts" : "One Bed",
        "roomcapacity" : "2 pax",
        "roomcharacteristics" : "Cozy",
        "roomname" : "CozyCone",
        "roomprice" : "288.00",
        "roomstatus" : "Available",
        "roomtype" : "Master Room",
        "username" : "tjing123"
      },
      "TheVamps" : {
        "imageUrl" : "https://firebasestorage.googleapis.com/v0/b/finalyearprojectapplicat-8a301.appspot.com/o/RoomImageStorage%2F60ea14ef-93bf-4c04-bb75-0a95731511dd%2Fcontent%3A%2Fcom.google.android.apps.photos.contentprovider%2F0%2F1%2Fmediakey%253A%252Flocal%25253A9145b259-426c-447a-a6b0-53cbf5770ace%2FORIGINAL%2FNONE%2F558417666?alt=media&token=eb57f6e6-fd81-4d90-a485-de40885a4a43",
        "roombedcounts" : "One Bed",
        "roomcapacity" : "2 pax",
        "roomcharacteristics" : "Cozy",
        "roomname" : "TheVamps",
        "roomprice" : "499.00",
        "roomstatus" : "Available",
        "roomtype" : "Master Room",
        "username" : "tjing123"
      }
    }
  },
  "Rooms" : {
    "CozyCone" : {
      "imageUrl" : "https://firebasestorage.googleapis.com/v0/b/finalyearprojectapplicat-8a301.appspot.com/o/RoomImageStorage%2F7b07e1ba-dabb-43b4-872b-087df75f8df6%2Fcontent%3A%2Fcom.google.android.apps.photos.contentprovider%2F0%2F1%2Fmediakey%253A%252Flocal%25253A277e0ed8-e053-48bb-8d04-3d720ba8264e%2FORIGINAL%2FNONE%2F691350677?alt=media&token=b043022c-a54a-4e2e-afa2-345d266c9c47",
      "roombedcounts" : "One Bed",
      "roomcapacity" : "2 pax",
      "roomcharacteristics" : "Cozy",
      "roomcounts" : "115",
      "roomid" : "1234",
      "roomname" : "CozyCone",
      "roomprice" : "288.00",
      "roomstatus" : "Available",
      "roomtype" : "Master Room"
    },
    "TheVamps" : {
      "imageUrl" : "https://firebasestorage.googleapis.com/v0/b/finalyearprojectapplicat-8a301.appspot.com/o/RoomImageStorage%2F60ea14ef-93bf-4c04-bb75-0a95731511dd%2Fcontent%3A%2Fcom.google.android.apps.photos.contentprovider%2F0%2F1%2Fmediakey%253A%252Flocal%25253A9145b259-426c-447a-a6b0-53cbf5770ace%2FORIGINAL%2FNONE%2F558417666?alt=media&token=eb57f6e6-fd81-4d90-a485-de40885a4a43",
      "roombedcounts" : "One Bed",
      "roomcapacity" : "2 pax",
      "roomcharacteristics" : "Cozy",
      "roomcounts" : "29",
      "roomid" : "8888",
      "roomname" : "TheVamps",
      "roomprice" : "499.00",
      "roomstatus" : "Available",
      "roomtype" : "Master Room"
    }
  },
  "RoomsToCustomer" : {
    "CozyCone" : {
      "johnny123" : true,
      "tjing123" : true
    },
    "TheVamps" : {
      "johnny123" : true,
      "tjing123" : true
    }
  },
  "Staff" : {
    "tt" : {
      "email" : "raymondting521@gmail.com",
      "fullname" : "raymondting",
      "password" : "Abcbc12345",
      "username" : "tt"
    }
  }
}

【问题讨论】:

  • 这能回答你的问题吗? Google firebase check if child exists....child(usernameFGS).equals(true) 永远不会是真的。
  • 但在我的数据库中这是真的
  • DataSnapshot.child(String) 返回另一个 DataSnapshot,而不是该节点的值。您可以查看here 了解如何正确读取数据的详细信息。
  • 我可以修改什么来改进或修复当前代码@HenryTwist,不胜感激
  • 在阅读了我链接的文章后,您有什么收获?

标签: java android firebase-realtime-database


【解决方案1】:

你的问题太多了,所以我只想指出我注意到的前几个问题。对于未来的问题,请按照how to create a minimal, complete, verifiable example 中的指导进行操作。


此代码不起作用:

if (snapshotter.child(roomnameunderCustomerBooked).child(usernameFGS).equals(true)) {

因为snapshotterDataSnapshot,所以snapshotter.child(roomnameunderCustomerBooked).child(usernameFGS) 也是。因此,您将 DataSnapshot 对象与文字 true 值进行比较,这永远不会匹配。

您需要将DataSnapshot 的布尔true 进行比较,您可以这样做:

bool value = snapshotter.child(roomnameunderCustomerBooked).child(usernameFGS).getValue(Boolean.class);
if (value.equals(true)) {

您将 onCancelled 留空,这意味着您忽略了可能引发的重要错误消息。 onCancelled 应该永远为空,并且至少应该类似于:

public void onCancelled(@NonNull DatabaseError databaseError) { 
    throw databaseError.toException(); 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-20
    • 1970-01-01
    相关资源
    最近更新 更多