当前位置: 首页 > 知识库问答 >
问题:

如何根据数据库在特定日期更新按钮(房间)?

赵宏达
2023-03-14

我创建数据库,使用curentdate(1-25)作为父id,使用room(08-00_11-00_karpet1-)作为子id>父id)。

问题一

使用此布局设计,如何禁用已订购的按钮,以指示该房间不再可用。

(例如,1-28日的用户订单karpet 14-17,当用户创建订单数据库时,将根据日期(parentid)更新数据库datajadwal

问题二

当特定日期点击时,房间按钮将根据datajadwal上的数据禁用,并在该日期(括号),如果没有房间数据(Childo),这意味着房间是可用。

我的情况=我不知道如何获得childid

private void datajadwalupdate(){
        databseJadwal = database.getReference("datajadwal").child(haritanggalOrder);
        databseJadwal.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot dateSnapshot: dataSnapshot.getChildren()) {
                    final String rooms = dataSnapshot.getKey();
                    databseJadwal.child(haritanggalOrder).child(rooms).addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                        }

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

                        }
                    });
                }
            }

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

            }
        });
    }

这就是我所在的位置,但在空对象引用上出错

共有2个答案

左丘边浩
2023-03-14

您需要遍历快照的子对象并检查数据,如果有用户数据,则禁用它。

DatabaseReference ref = rootRef.child(id).child(date);
ref.addValueEventListener(...

    onDataChange...{
          for (Snapshot child: dataSnapshot.getChildren()) {
                 //set the names as you are doing it
                 boolean occupied = child.hasChild("email)
                 button.setEnabled(!occupied)
           }

    }

您应该创建一个代表您的实体的POJO,并使用getValue(YourPOJO. class)从快照子级获取值

盛骏祥
2023-03-14

如果我正确理解你的问题,你将需要datajadwal下的所有数据来禁用正确的按钮。在这种情况下,您可以使用这样的侦听器:

DatabaseReference ref = FirebaseDatabase.getInstance().getReference("datajadwal");
ref.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot dateSnapshot: dataSnapshot.getChildren()) {
            String date = dataSnapshot.getKey();
            for (DataSnapshot bookingSnapshot: dateSnapshot.getChildren()) {
                String booking = bookingSnapshot.getKey();

                // TODO: parse the booking into the time slot and room name
                String timeslot = ...
                String room = ...

                // TODO: find the button for the room name and time slot and disable it

            }
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        throw databaseError.toException();
    }
}
 类似资料:
  • 我是Android的新手,需要一些帮助。 我的问题是我到底什么时候调用命令,以及room如何知道哪一行发生了更改?我不想更新到整个表。 如果我应该用另一种方式解释,请告诉我。

  • 问题内容: 所以我的代码如下: 我正在做一个测试,看是否可以过滤月份,所以它只显示11月的日期,但这没有用。它给了我以下错误:AttributeError:’Int64Index’对象没有属性’month’。 如果我做 然后我得到类’pandas.tslib.Timestamp’,这使我相信存储在数据框中的对象类型是Timestamp对象。(我不确定之前的错误是“ Int64Index”来自何处)

  • 我试图更新下载按钮点击数据库列。似乎很容易,但当我点击按钮数据库中的计数器不更新。 我不确定这是否是最佳和正确的方法,但这是我到目前为止所做的。 一个输入字段,用户从API中提取图像 当图像加载有显示按钮下载和用户可以下载它 另外,当用户搜索图像时,我会将搜索的内容保存在数据库中。这是我的控制器函数,用于将图像保存在数据库中的搜索字符串中。这很好用 这是下载时更新按钮单击的功能 视图中的按钮 路线

  • 我在我的应用程序中使用RoomDB。其实我想看db文件。 上面的代码是给我db文件所在的目录保存目录是这样的 但我仍然无法从命令提示符下使用sudo访问数据目录。现在我想把DB文件的位置改成内存或SD卡中的其他文件夹。我该怎么做?

  • 我尝试在Android房间中附加数据库,如下所示:如何从Android房间中的多个数据库中进行选择(如何附加数据库),但在构建项目时出现错误:错误:查询有问题:[SQLITE\u错误]SQL错误或缺少数据库(没有这样的表:database.table)错误 当我添加@SkipQuery验证时,错误发生了变化:错误:不确定如何将游标转换为此方法的返回类型。 当我从查询中删除“myDatabase.”

  • 问题内容: 我试图执行以下SQL查询并根据日期过滤出数据。 我需要显示一个表,该表过滤掉数据,使得仅那些提到的start_date和end_date之间的行 这是我一直在尝试的查询 我也从2012年获得了具有价值的结果。请帮帮我 谢谢 问题答案: 由于您没有提及任何错误(如果和是数据类型),因此查询没有任何问题。如果您没有获得正确的记录,请检查数据。 但是你的。您可以遵循一些好的做法来避免此类问题