【问题标题】:Read Data when activity is started活动开始时读取数据
【发布时间】:2022-01-26 23:43:15
【问题描述】:

我想在我的回收站视图中实现类似的东西,我想显示 CONSTANT UP TO DATE 数据,即“ROOMSTATUS”

想象一下,我有两个不同的帐户,一个是员工帐户和客户帐户,当客户将他想要的物品添加到购物车时,房间状态显然是可用的,客户可以这样做

但是,如果客户还没有结帐该特定商品,并且员工方面发生了突然变化,例如员工更改了客户添加到购物车中的特定商品变得不可用,这意味着它不会让客户检查该特定项目,但我想做的只是让回收站视图上显示的文本类似于项目选择列表上的文本。

但是,每当我进入那个活动时,它就会崩溃,并给我这个错误,

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object

参考 在 com.example.fyptest1.CustomerBookedRoomAdapter$1.onDataChange(CustomerBookedRoomAdapter.java:54)"

我认为它说,updatedRoomStatus = snapshot.child("roomstatus").getValue().toString(); 此行没有从 firebase 获取任何数据,但我可以确保其中有数据

我不确定是不是因为我已经实现了 onDataChanged 关键字,还有其他方法可以解决这个问题吗?

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

        roomnameunderCustomerBooked = model.getRoomname();
        dataRef = FirebaseDatabase.getInstance().getReference().child("Rooms");

        dataRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull @NotNull DataSnapshot snapshot) {
                if(snapshot.child(roomnameunderCustomerBooked).child("roomname").exists()){
                    String updatedRoomStatus = "";
                    updatedRoomStatus = snapshot.child("roomstatus").getValue().toString();


                    holder.roomName.setText(model.getRoomname());
                    holder.roomType.setText(model.getRoomtype());
                    holder.roomCapacity.setText(model.getRoomcapacity());

                    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.roomPrice.setText(model.getRoomprice());
                    holder.roomCharacteristics.setText(model.getRoomcharacteristics());
                    Picasso.get().load(model.getImageurl()).fit().into(holder.roomImage);

                }else{
                    
                }

            }

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

            }
        });

这是我的数据库结构

{
  "Customer" : {
    "tjing123" : {
      "email" : "jh@gmail.com",
      "fullname" : "JingHuan",
      "password" : "1",
      "username" : "tjing123"
    }
  },
  "CustomerBookedRooms" : {
    "tjing123" : {
      "Always" : {
        "imageUrl" : "https://firebasestorage.googleapis.com/v0/b/finalyearprojectapplicat-8a301.appspot.com/o/RoomImageStorage%2F20476d50-0256-4637-a85f-88cfb0d49509%2Fcontent%3A%2Fcom.android.providers.media.documents%2Fdocument%2Fimage%253A76555?alt=media&token=9042d0c2-1203-48a9-85e0-66de5c30eb84",
        "roombedcounts" : "One Bed",
        "roomcapacity" : "1 pax",
        "roomcharacteristics" : "Cozy",
        "roomname" : "Always",
        "roomprice" : "588.00",
        "roomstatus" : "Available",
        "roomtype" : "Single Room",
        "username" : "tjing123"
      },
      "Kokomi" : {
        "imageUrl" : "https://firebasestorage.googleapis.com/v0/b/finalyearprojectapplicat-8a301.appspot.com/o/RoomImageStorage%2F175ac041-af4d-4ffd-8b0f-0f04f3b293f5%2Fcontent%3A%2Fcom.google.android.apps.photos.contentprovider%2F0%2F1%2Fmediakey%253A%252Flocal%25253Ab456c215-0536-4e05-8f77-616f83d36055%2FORIGINAL%2FNONE%2F1931479739?alt=media&token=1cab4f94-929f-4f52-8a46-aa76c82a0848",
        "roombedcounts" : "Two Beds",
        "roomcapacity" : "2 pax",
        "roomcharacteristics" : "Cozy",
        "roomname" : "Kokomi",
        "roomprice" : "499.00",
        "roomstatus" : "Available",
        "roomtype" : "Couple Room",
        "username" : "tjing123"
      },
      "The Nuts" : {
        "imageUrl" : "https://firebasestorage.googleapis.com/v0/b/finalyearprojectapplicat-8a301.appspot.com/o/RoomImageStorage%2Fd0f0279a-121b-4747-bdf0-76c9e7bfb30c%2Fcontent%3A%2Fcom.android.providers.media.documents%2Fdocument%2Fimage%253A76556?alt=media&token=e234d404-adfd-4a64-b180-50408c90a823",
        "roombedcounts" : "One Bed",
        "roomcapacity" : "2 pax",
        "roomcharacteristics" : "Cozy",
        "roomname" : "The Nuts",
        "roomprice" : "258.00",
        "roomstatus" : "Available",
        "roomtype" : "Master Room",
        "username" : "tjing123"
      }
    }
  },
  "Rooms" : {
    "Always" : {
      "imageUrl" : "https://firebasestorage.googleapis.com/v0/b/finalyearprojectapplicat-8a301.appspot.com/o/RoomImageStorage%2F20476d50-0256-4637-a85f-88cfb0d49509%2Fcontent%3A%2Fcom.android.providers.media.documents%2Fdocument%2Fimage%253A76555?alt=media&token=9042d0c2-1203-48a9-85e0-66de5c30eb84",
      "roombedcounts" : "One Bed",
      "roomcapacity" : "1 pax",
      "roomcharacteristics" : "Cozy",
      "roomid" : "1111",
      "roomname" : "Always",
      "roomprice" : "588.00",
      "roomstatus" : "Maintenance",
      "roomtype" : "Single Room"
    },
    "HEHE" : {
      "imageUrl" : "https://firebasestorage.googleapis.com/v0/b/finalyearprojectapplicat-8a301.appspot.com/o/RoomImageStorage%2F36b436d2-0897-41a3-9d08-0ec48ec13a5d%2Fcontent%3A%2Fcom.android.providers.media.documents%2Fdocument%2Fimage%253A25?alt=media&token=2984d69a-b52c-4003-9adc-eb7556b97bf7",
      "roombedcounts" : "Three Beds",
      "roomcapacity" : "2 pax",
      "roomcharacteristics" : "Scenery View",
      "roomid" : "1111",
      "roomname" : "HEHE",
      "roomprice" : "399.00",
      "roomstatus" : "Maintenance",
      "roomtype" : "Master Room"
    },
    "Huan&Jian" : {
      "imageUrl" : "https://firebasestorage.googleapis.com/v0/b/finalyearprojectapplicat-8a301.appspot.com/o/RoomImageStorage%2Fd8ad8454-29b4-4a44-b2c0-4da584c0cf17%2Fcontent%3A%2Fcom.android.providers.media.documents%2Fdocument%2Fimage%253A71334?alt=media&token=0cbd8564-adbd-4a69-8bbb-4c0b8af1ab5c",
      "roombedcounts" : "One Bed",
      "roomcapacity" : "2 pax",
      "roomcharacteristics" : "Cozy",
      "roomid" : "1314",
      "roomname" : "Huan&Jian",
      "roomprice" : "188.00",
      "roomstatus" : "Maintenance",
      "roomtype" : "Couple Room"
    },
    "Kokomi" : {
      "imageUrl" : "https://firebasestorage.googleapis.com/v0/b/finalyearprojectapplicat-8a301.appspot.com/o/RoomImageStorage%2F175ac041-af4d-4ffd-8b0f-0f04f3b293f5%2Fcontent%3A%2Fcom.google.android.apps.photos.contentprovider%2F0%2F1%2Fmediakey%253A%252Flocal%25253Ab456c215-0536-4e05-8f77-616f83d36055%2FORIGINAL%2FNONE%2F1931479739?alt=media&token=1cab4f94-929f-4f52-8a46-aa76c82a0848",
      "roombedcounts" : "Two Beds",
      "roomcapacity" : "2 pax",
      "roomcharacteristics" : "Cozy",
      "roomid" : "5555",
      "roomname" : "Kokomi",
      "roomprice" : "499.00",
      "roomstatus" : "Available",
      "roomtype" : "Couple Room"
    },
    "The Nuts" : {
      "imageUrl" : "https://firebasestorage.googleapis.com/v0/b/finalyearprojectapplicat-8a301.appspot.com/o/RoomImageStorage%2Fd0f0279a-121b-4747-bdf0-76c9e7bfb30c%2Fcontent%3A%2Fcom.android.providers.media.documents%2Fdocument%2Fimage%253A76556?alt=media&token=e234d404-adfd-4a64-b180-50408c90a823",
      "roombedcounts" : "One Bed",
      "roomcapacity" : "2 pax",
      "roomcharacteristics" : "Cozy",
      "roomid" : "7272",
      "roomname" : "The Nuts",
      "roomprice" : "258.00",
      "roomstatus" : "Available",
      "roomtype" : "Master Room"
    }
  },
  "Staff" : {
    "tt" : {
      "email" : "rayray@gmail.com",
      "fullname" : "raymondting",
      "password" : "Abcbc123456789!",
      "username" : "tt"
    }
  }
}

【问题讨论】:

  • 请编辑您的问题并将您的数据库结构添加为 JSON 文件。您可以通过单击 Firebase Console 的溢出菜单 (⠇) 中的导出 JSON 来简单地获取它。
  • 我已经附上了我的数据库结构,请看@AlexMamo,非常感谢!

标签: java android firebase firebase-realtime-database


【解决方案1】:

假设roomnameunderCustomerBooked 持有Always 的值,例如,当您使用以下语句时:

if(snapshot.child(roomnameunderCustomerBooked).child("roomname").exists()){...}

这基本上意味着您正在尝试检查以下引用下的值是否存在:

root/Rooms/Always/roomname

确实如此,值为Always。但是,当您尝试使用此行读取 roomstatus 的值时:

updatedRoomStatus = snapshot.child("roomstatus").getValue().toString();

获取 NullPOinterEception 是有意义的,因为在 Rooms 节点下没有 roomstatus 子节点。这个孩子就存在于Always 下,您的参考资料中缺少它。所以请把上面这行代码改成:

updatedRoomStatus = snapshot
    .child(roomnameunderCustomerBooked)
    .child("roomstatus")
    .getValue(String.class);

【讨论】:

  • 我改变了它,但它仍然在 CustomerBookedRooms 表中获取数据,而不是在 Rooms 表中获取数据
  • 例如,在表Rooms中,有一个名为Always的房间,状态为Maintenance,我想在CustomerBookedRooms表中显示这个Maintenance字,但是我知道CustomerBookedRooms中的房间状态不相似,这就是为什么在将所有这些数据分配到相应的文本视图之前,我检查了房间状态,我的意图是我总是想确保房间状态数据是从那里获取的,而不是从 CustomerBookedRooms 表中获取的。
  • 它不能因为dataRef 引用指向Rooms 节点。是的,这应该显示"roomstatus" : "Maintenance",
  • 但是为什么我的数据仍然是从 CustomerBookedRooms 表中获取的,而不是从 Rooms 表中获取的呢?
  • 这是因为您将addValueEventListener 附加到恰好指向Rooms 节点的dataRef = FirebaseDatabase.getInstance().getReference().child("Rooms"); 对象上,对吧?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-14
相关资源
最近更新 更多