Tengo una base de datos de muestra en Firebase que está destinada a mostrar algunos hechos. Actualmente, quiero que la vista de texto muestre los cinco hechos de muestra 1, 2, 3, 4, 5 ... pero solo muestra el último. ¿Dónde debo modificar mi código?

Muestra de Java:

fact = database.getInstance().getReference().child("Facts");

        fact.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                for (DataSnapshot postSnapshot : dataSnapshot.getChildren()){

                    Fact factdata = postSnapshot.getValue(Fact.class);

                    factViewBox.setText(factdata.getFactDetail());


                }


            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

Y la json:

"Facts":{
    "01":{
   "factDetail":"1" 
   }
,

"02":{
   "factDetail":"2" 
}
,
"03":{
   "factDetail":"3" 
}
,
"04":{
   "factDetail":"4" 
}
,
"05":{
   "factDetail":"5" 
}

}
-3
David Käriu III 14 nov. 2017 a las 11:15

2 respuestas

La mejor respuesta

Lo que hace su código es simplemente reemplazar el texto actual en TextView con factdata.getFactDetail().

Por ejemplo, tiene 3 elementos 1, 2 y 3. Luego, desea mostrar el elemento dentro de TextView. Con tu código, esto es lo que pasa

Primera iteración:

element = elements[0];        // element = 1
factViewBox.setText(element); // TextView text is "1"

Segunda iteración:

element = elements[1];        // element = 2
factViewBox.setText(element); // TextView text is "2"

Tercera iteración:

element = elements[2];        // element = 3
factViewBox.setText(element); // TextView text is "3"

Por lo tanto, su TextView solo muestra el último detalle del elemento / hecho

0
Kevin Christian 14 nov. 2017 a las 08:43
 for (DataSnapshot postSnapshot : dataSnapshot.getChildren()){    
    Fact factdata = postSnapshot.getValue(Fact.class); 
    if(factViewBox.getText().length() > 0 ){
         factViewBox.setText(factViewBox.getText() + "\n" + factdata.getFactDetail());
    }else{
         factViewBox.setText(factdata.getFactDetail());
    }
 }

Necesitas cambiar en el bucle for

1
Manoj kumar 14 nov. 2017 a las 08:21