2013-07-28 13 views
22

Próbuję użyć interfejsu Java API do odczytu danych z bazy danych Firebase w aplikacji Android w zdarzeniu onCreate(). Innymi słowy, próbuję zrobić najprostszy odczyt możliwy, odpowiednik ...Jak odczytać dane z Firebase ONCE przy użyciu java/android?

ref.once('value', function(snapshot) { 

}); 

... w JavaScript API. Próbuję użyć metody addEventListenerForSingleValueEvent(), ale wydaje mi się, że chcę zastąpić metodę onDataChange(), która nie jest tym, czego potrzebuję. Chcę uzyskać dane, gdy wykonanie programu osiągnie ten wiersz, niezależnie od zdarzeń bazy danych. Oto moja (niedokończona) funkcja ...

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.poll_table);  

     // First get the table layout 
     tbl = (TableLayout) findViewById(R.id.pollsTable); 

     // Now let's create the header 
     TableRow tHead = createPollsTableHeader(); 

     // Add header to tableLayout 
     tbl.addView(tHead, new TableLayout.LayoutParams(
       LayoutParams.MATCH_PARENT, 
       LayoutParams.WRAP_CONTENT)); 

     // Add all polls in ref as rows 
     polls.addListenerForSingleValueEvent(new ValueEventListener() { 
      // DON'T KNOW WHAT TO DO HERE 

     } 
    } 

Nie sądzę, że to jest poprawna metoda. Chcę po prostu być w stanie uzyskać Datasnapshot że mogę iterację i uzyskać dane z jak ...

for (Datasnapshot child : datasnapshot) { 
} 

..just jakbym za pomocą zdarzenia ref.once('value', function(snapshot) w API Javaxcript.

Odpowiedz

46

To jest właściwa metoda i jesteś na dobrej drodze. Nazewnictwo jest trochę mylące (przepraszam!). Jeśli zrobisz addListenerForSingleValueEvent, twoja przesłonięta metoda onDataChange zostanie wywołana dokładnie raz, z DataSnapshot, dokładnie tak, jak chcesz (i tak samo jak "ref.once ('value' ...)").

więc powinieneś być w stanie to zrobić:

// Add all polls in ref as rows 
polls.addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot snapshot) { 
     for (DataSnapshot child : snapshot.getChildren()) { 
      ... 
     } 
    } 
} 
+0

Oh cool, dostał. Dzięki Michael! – MassStrike

+0

Musiałem użyć snapshot.getChildren() '' 'dla (DataSnapshot child: snapshot.getChildren()) {' '' – realgt

+0

@realgt Oops, masz rację. Zaktualizowano odpowiedź. Dzięki! –

Powiązane problemy