2017-08-06 5 views
0

Ich habe eine App, die 256 Zeilen der Nummer speichern, die die Hintergrundfarbe von jeder 256 Zellen in einer Gridview anzeigen. Momentan sind alle Werte -16449536, die der Einfachheit halber schwarze Farbe anzeigen. Firebase-Echtzeitdatenbankzugriff nicht abgeschlossen?

Das folgende ist meine JSON Struktur in Firebase Datenbank

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

........... 

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

    }, 

Im onCreate Verfahren verwendete ich eine for-Schleife 256-mal für jede Zelle zu lesen:

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) { 

      } 
     }); 
    } 

Das Ergebnis, da dies pic: I expect all dots to be black

Nicht alle Gitter sind schwarz. Jedes Mal, wenn ich die App erneut öffne, um die onCreate-Methode auszulösen, unterscheiden sich die Rastermuster irgendwie. Habe ich einige Einschränkungen in der Firebase-Echtzeitdatenbank erreicht?

Antwort

0

Unabhängig von dem Problem in Ihrem aktuellen Code, du bist besser dran, den Ersatz der 256 (!!!) Zuhörer mit einem einzigen 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); 
    } 
    ... 
} 

Es gibt ein paar weitere Methoden, die Sie brauchen, implementieren, aber das sind die wichtigsten, um loszulegen.

Ich empfehle über listening for lists of data in the Firebase documentation zu lesen.