Obtención de datos de la base de datos Natures ChildrenBase RealTimeBase -- android campo con firebase campo con kotlin campo con firebase-realtime-database camp Relacionados El problema

Getting data from nested children Firebase Realtimebase Database


0
vote

problema

Español

He estado usando Firsebase recientemente. Prenda Tengo una pregunta porque hay una parte que no funciona bien. Prenda Todo lo que quiero es el valor total de A, B, y C.

¿Cuánto es una, cuánto es B, y cuánto es c? Prenda Parece simple, pero no funciona como lo pensé.

  myRef.addListenerForSingleValueEvent(object : ValueEventListener {   override fun onDataChange(p0: DataSnapshot) {     for (snapshot in p0.children) {       var ref = snapshot.key       Log.d ("Test", snapshot.key) // get A,B,C,Name       Gets the contents of the log.d("bell", p0.child("A").value.toString())) // A     }   } });   

Podemos obtener la suma de A, B, C en la forma anterior, pero quiero implementar la parte fluida. Prenda Podría haber una H, así como una C, y me gustaría lidiar con la diferencia en el número de subtexts. Prenda He estado pensando en Arraylist. Me preocupa que se complique más si se almacena de esta manera. Prenda Estoy escribiendo para ver si puedo obtener ayuda.

ingrese la descripción de la imagen aquí

Original en ingles

I've been using Firebase recently. xe2x80x8b I have a question because there is a part that doesn't work well. xe2x80x8b All I want is the total value of a, b, and c.

How much is a, how much is b, and how much is c? xe2x80x8b It seems simple, but it doesn't work as I thought it would.

myRef.addListenerForSingleValueEvent(object : ValueEventListener {   override fun onDataChange(p0: DataSnapshot) {     for (snapshot in p0.children) {       var ref = snapshot.key       Log.d ("Test", snapshot.key) // get A,B,C,Name       Gets the contents of the log.d("bell", p0.child("A").value.toString())) // A     }   } }); 

xe2x80x8b We can get the sum of a, b, c in the above way, but I want to implement the fluid part. xe2x80x8b There could be an H as well as a C, and I'd like to deal with the difference in the number of subtexts. xe2x80x8b I've been thinking about Arraylist. I'm worried that it'll get more complicated if it's stored this way. xe2x80x8b I'm writing to see if I can get some help.

enter image description here

           

Lista de respuestas

0
 
vote
vote
La mejor respuesta
 

Si desea obtener todos los valores que existen en cada nodo, A, B, C, D, E, etc., sin importar cuántos niños estén allí, debe consultar la base de datos dos veces. Así que asume que el nodo "TIMEDATA" es un hijo directo de su raíz de base de datos en tiempo real de Firebase, y esa ID larga, es el UID de los usuarios registrados, use las siguientes líneas de código:

  val uid = FirebaseAuth.getInstance().currentUser!!.uid val rootRef = FirebaseDatabase.getInstance().reference val uidRef = rootRef.child("timedata").child(uid) val valueEventListener: ValueEventListener = object : ValueEventListener {     override fun onDataChange(dataSnapshot: DataSnapshot) {         var total: Long = 0         for (ds in dataSnapshot.children) {             for (dSnapshot in ds.children) {                 val value = dSnapshot.getValue(Long::class.java)!!.toLong()                 total += value             }         }         Log.d(TAG, "total: $total")     }      override fun onCancelled(databaseError: DatabaseError) {         Log.d("TAG", databaseError.message) //Don't ignore potential errors!     } } uidRef.addListenerForSingleValueEvent(valueEventListener)   

y esto es para usuarios de Java:

  String uid = FirebaseAuth.getInstance().getCurrentUser().getUid(); DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); DatabaseReference uidRef = rootRef.child("timedata").child(uid); ValueEventListener valueEventListener = new ValueEventListener() {     @Override     public void onDataChange(DataSnapshot dataSnapshot) {         long total = 0;         for(DataSnapshot ds : dataSnapshot.getChildren()) {             for(DataSnapshot dSnapshot : ds.getChildren()) {                 long value = Long.parseLong(dSnapshot.getValue(Long.class));                 total += value;             }         }         Log.d(TAG, "total: " + total);     }      @Override     public void onCancelled(@NonNull DatabaseError databaseError) {         Log.d("TAG", databaseError.getMessage()); //Don't ignore potential errors!     } }; uidRef.addListenerForSingleValueEvent(valueEventListener);   

De acuerdo con su captura de pantalla, el resultado en su logcat será:

  53032   
 

If you want to get all the values that exist under each node, a, b, c, d, e, etc, no matter how many children are there, you need to query the database twice. So assuming that the "timedata" node is a direct child of your Firebase Realtime Database root, and that long id, is the UID of the logged-in users, please use the following lines of code:

val uid = FirebaseAuth.getInstance().currentUser!!.uid val rootRef = FirebaseDatabase.getInstance().reference val uidRef = rootRef.child("timedata").child(uid) val valueEventListener: ValueEventListener = object : ValueEventListener {     override fun onDataChange(dataSnapshot: DataSnapshot) {         var total: Long = 0         for (ds in dataSnapshot.children) {             for (dSnapshot in ds.children) {                 val value = dSnapshot.getValue(Long::class.java)!!.toLong()                 total += value             }         }         Log.d(TAG, "total: $total")     }      override fun onCancelled(databaseError: DatabaseError) {         Log.d("TAG", databaseError.message) //Don't ignore potential errors!     } } uidRef.addListenerForSingleValueEvent(valueEventListener) 

And this is for Java users:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid(); DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); DatabaseReference uidRef = rootRef.child("timedata").child(uid); ValueEventListener valueEventListener = new ValueEventListener() {     @Override     public void onDataChange(DataSnapshot dataSnapshot) {         long total = 0;         for(DataSnapshot ds : dataSnapshot.getChildren()) {             for(DataSnapshot dSnapshot : ds.getChildren()) {                 long value = Long.parseLong(dSnapshot.getValue(Long.class));                 total += value;             }         }         Log.d(TAG, "total: " + total);     }      @Override     public void onCancelled(@NonNull DatabaseError databaseError) {         Log.d("TAG", databaseError.getMessage()); //Don't ignore potential errors!     } }; uidRef.addListenerForSingleValueEvent(valueEventListener); 

According to your screenshot, the result in your logcat will be:

53032 
 
 
   
   

Relacionados problema

1  Cómo leer UIDS de la base de datos de Firsebase  ( How to read uids from firebase database ) 
con permiso otorgado, ¿cómo leer estos uids? He intentado esto sin suerte: //members.ts export class MembersPage { user:any = 'wait...'; ...

0  Lea la bomba de fuego sincrónicamente  ( Read firebase in synchronously ) 
Estoy tratando de crear un método para leer mi base de datos de Firebase en línea con el resto de mi código. Estoy tratando de usar un bloqueo de reentrant pa...

1  NG-SHOW / NG-OPEE VALOR ¿No está cambiando después de obtener los datos de Firsebase?  ( Ng show ng hide value is not changing after getting the data from firebase ) 
Cuando estoy recibiendo los datos de la Firstbase, estoy cambiando el alcance del valor de ONG-SHOW / NG-Ocultar con FALSE. Pero no afecta a ninguna cosa en m...

0  Los datos guardan al evento. Obtenga la tecla PUSH. Pero emitir mientras Event_Key Ass asigna Lista de eventos {Ref: Event_Key} Firebase Real Time Base de datos  ( Data save to event i get push key but issue while event key assign eventlist ) 
He guardado algunos de los datos en evento y esa ubicación / clave que necesito para la referencia del usuario. Así que he intentado guardar usuario / event...

2  Enviar notificación cuando se agrega nuevo niño a la base de datos de Firebase  ( Send notification when new child is added to firebase database ) 
Estoy usando la base de datos de Firebase en mi aplicación, y debo enviar una notificación al administrador cuando se agrega un nuevo pedido a la base de dato...

0  Firebase Realtime Database Diferencia entre instantáneas de datos  ( Firebase realtime databse difference between data snapshots ) 
Si tengo una estructura de base de datos como aquí y hago una consulta como se muestra abajo. Si hay una diferencia en el tráfico utilizado para descargar l...

4  Crear productos Google Play y Facturación en la aplicación  ( Create products google play and in app billing ) 
Estoy haciendo una aplicación que tiene un RecyclerView con muchos elementos (algunos de ellos son fijo y son por predeterminado para todos) , pero me g...

0  Typerror: el set no es una función con angularjs  ( Typerror set is not a function with angularjs ) 
Estoy encontrando este error: TypeError: fb.set no es una función, angular.js: 13550 mientras estoy tratando de enviar datos a mi base de datos de Firebas...

0  El tipo de argumento 'tipo' no se puede asignar al tipo de parámetro 'FireBaseUSER'  ( The argument type type cant be assigned to the parameter type firebaseuser ) 
Cada vez que llamo a esta función (_sendtoserver) en una función onPrima, obtengo este error. Error: el tipo de argumento 'tipo' no se puede asignar al tipo ...

2  Consulta de búsqueda de Firebasa no funciona en Android  ( Firebase search query not working on android ) 
Estoy implementando una búsqueda en mi aplicación de Android y parece que no puedo hacer que funcione. System.Net.Http.HttpClient2 Cuando quito System....




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos