¿Cómo leer datos de Firebase ONCE utilizando java / android?

Estoy tratando de usar la API de Java para leer datos de una base de datos Firebase en una aplicación de Android en el evento onCreate (). En otras palabras, estoy tratando de hacer la lectura más simple posible, el equivalente a …

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

… en la API de Javascript. Estoy intentando utilizar el método addEventListenerForSingleValueEvent (), pero parece querer que anule el método onDataChange (), que no es lo que quiero. Quiero obtener los datos cuando la ejecución del progtwig llegue a esta línea, independientemente de los eventos de la base de datos. Aquí está mi función (inacabada) …

 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 } } 

Ni siquiera creo que este sea el método correcto. Solo quiero poder obtener un Datasnapshot que pueda repetir y obtener datos, como …

 for (Datasnapshot child : datasnapshot) { } 

.. como si estuviera usando el ref.once('value', function(snapshot) en la API de Javaxcript.

Ese es el método correcto, y usted está en el camino correcto. El nombramiento es un poco confuso (¡lo siento!). Si realiza el addListenerForSingleValueEvent, el método reemplazado onDataChange se invocará exactamente una vez, con un DataSnapshot, tal como lo desea (y como lo haría “ref.once (‘value’ …)”).

Así que deberías poder hacer:

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