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

Firebase实时数据库访问未完成?

花烨
2023-03-14

我有一个应用程序,存储256行数字,指示网格视图中每个256个单元格的背景颜色。目前所有的值都是-16449536,表示简单的黑色。

以下是我在Firebase数据库中的JSON结构

 "publicwall" : {
    "cell0" : -16449536,
    "cell1" : -16449536,

...........

    "cell254" : -16449536,
    "cell255" : -16449536

  },

在onCreative方法中,我使用for循环为每个单元格读取256次:

    for (int i = 0; i < 256; i++) {
        final int position = i;
        DatabaseReference cell_color = mDatabase.child("publicwall").child("cell" + i);
        cell_color.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                ColorData = dataSnapshot.getValue(int.class);
                gridAdapter.notifyColorChange(ColorData, position);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }

并非所有网格都是黑色的。每次我重新打开应用程序以触发onCreate方法时,网格模式都会有所不同。我是否达到了firebase实时数据库的某些限制?

共有1个答案

贺俊杰
2023-03-14

不管当前代码中存在什么问题,最好还是替换256(!!!)具有单个ChildEventListener的侦听器

mDatabase.child("publicwall").addChildEventListener(new ValueEventListener() {
  public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) {
      String key = dataSnapshot.getKey();
      int position = Integer.parseInt(key.substring(4));
      ColorData = dataSnapshot.getValue(int.class);
      gridAdapter.notifyColorChange(ColorData, position);
  }
  public void onChildChanged(DataSnapshot dataSnapshot) {
      String key = dataSnapshot.getKey();
      int position = Integer.parseInt(key.substring(4));
      ColorData = dataSnapshot.getValue(int.class);
      gridAdapter.notifyColorChange(ColorData, position);
  }
  ...
}

您还需要实现其他一些方法,但这些是最重要的方法。

我建议阅读有关监听Firebase留档中数据列表的内容。

 类似资料:
  • 我目前有一个类似以下的数据库结构。如果无法在Firebase实时数据库安全规则中循环,我如何基于用户对多个组的访问来保护数据?要遵循的例子... 数据库结构: 我如何在上指定安全规则,以基于中指定的任何组与当前用户的

  • 我有以下Firebase实时数据库连接到我的Flatter项目: 我对flutter和fire base相当陌生,我知道在我的flutter项目中访问此数据库中数据的一种方法是使用数据库引用变量。所以我有以下参考变量: 现在,如何使用此itemRef访问数据库中的温度和脉冲值?

  • 我需要一个简单的方法来阻止任何人将下面的代码复制到他们的inspector工具中,从而添加错误的分数。没有用户,我只想限制浏览器的写入权限。Firebase实时数据库中的安全规则有没有办法做到这一点?现在我只有“.read”:true“.write”:true和验证。

  • 我在一个Android应用程序中使用Firebase数据库,每次用户启动时,我都会在数据库中存储一些值,为此我会执行以下操作: 正如您在子方法中看到的,如果称为“usrId”,它将创建usrId目录,并在其中添加所有neccesary信息。但是我想为每个用户创建目录,所以我尝试传递usrId变量作为参数。但它不起作用。当我调试代码时,调试器说本地var usrId无法识别,我的问题是如何在Fire

  • 我在XCode中编写了一个方法,在firebase实时数据库中保存“用户”。不幸的是,数据没有显示在我的浏览器中的实时数据库中,尽管我通过内置的打印命令从Xcode得到了反馈,一切都很顺利。有人知道吗?我真的很高兴听到你的消息。最美好的祝福 PS:是的:读取和写入在我的数据库规则中被激活。