2013-07-28 13 views
22

Sto cercando di utilizzare l'API Java per leggere i dati da un database Firebase in un'applicazione Android nell'evento onCreate(). In altre parole, io sto cercando di fare il più semplice possibile leggere, l'equivalente di ...Come leggere i dati da Firebase ONCE usando java/android?

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

}); 

... nell'API JavaScript. Sto cercando di utilizzare il metodo addEventListenerForSingleValueEvent(), ma sembra che voglia sovrascrivere il metodo onDataChange(), che non è quello che voglio. Voglio ottenere i dati quando l'esecuzione del programma raggiunge questa linea, indipendentemente dagli eventi del database. Ecco la mia funzione (incompleta) ...

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 

     } 
    } 

Non penso nemmeno che questo sia il metodo corretto. Voglio solo essere in grado di ottenere un Datasnapshot che posso scorrere e ottenere i dati fuori, come ...

for (Datasnapshot child : datasnapshot) { 
} 

..just come se stessi utilizzando l'evento ref.once('value', function(snapshot) nell'API Javaxcript.

risposta

46

Questo è il metodo giusto e sei sulla strada giusta. La denominazione è solo un po 'confusa (mi dispiace!). Se si esegue l'addListenerForSingleValueEvent, il metodo overridden onDataChange verrà chiamato esattamente una volta, con un DataSnapshot, proprio come si desidera (e proprio come "ref.once ('value' ...)" farebbe).

Così si dovrebbe essere in grado di fare:

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

Oh fresco, ce l'ha. Grazie Michele! – MassStrike

+0

Ho dovuto usare snapshot.getChildren() '' 'for (DataSnapshot child: snapshot.getChildren()) {' '' – realgt

+0

@realgt Oops, hai ragione. Aggiornata la risposta. Grazie! –