2017-08-06 32 views
0

私はgridviewの各256のセルの背景色を示す256行の番号を格納するアプリを持っています。現在、すべての値は-16449536であり、簡単にするために黒色を示しています。Firebaseリアルタイムデータベースへのアクセスが完了していませんか?

以下がFirebaseデータベース内のonCreate方法で

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

........... 

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

    }, 

私のJSON構造であり、私は、各セルに対して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リアルタイムデータベースのいくつかの制限に達しましたか?単一ChildEventListener

答えて

0

関係なく、あなたの現在のコードでは、問題の、あなたが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を読むことをお勧めします。

関連する問題