2017-08-06 72 views
0

我有一个应用程序,它存储256行数字,表示GridView中每个256单元格的背景颜色。目前所有值都是-16449536,为简单起见,它们表示黑色。Firebase实时数据库访问不完整?

以下是在火力地堡数据库

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

........... 

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

    }, 

我的JSON结构在onCreate方法,我使用的用于循环读取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) { 

      } 
     }); 
    } 

结果是,因为这图: I expect all dots to be black

并非所有的网格都是黑色的。 每次我重新打开应用程序来触发onCreate方法,网格模式在某种程度上是不同的。我在Firebase实时数据库中遇到了一些限制吗?不管你目前的代码问题的

回答

0

,你最好有一个ChildEventListener更换256(!)听众:

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); 
    } 
    ... 
} 

有你需要多几个方法实施,但这些是最重要的开始。

我推荐阅读约listening for lists of data in the Firebase documentation