我有一个应用程序,存储256行数字,表示网格视图中每256个单元格的背景颜色。目前所有值均为-16449536,表示黑色为简单起见。
以下是我在Firebase数据库中的JSON结构
"publicwall" : {
"cell0" : -16449536,
"cell1" : -16449536,
...........
"cell254" : -16449536,
"cell255" : -16449536
},
在onCreate方法中,我使用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实时数据库有一些限制吗?
答案 0 :(得分: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。