Cómo mostrar conectado a datos de usuario de la base de fuego de base de datos en tiempo real en Android Studio

Einstein:

Sobre la base de usuario conectado quiero mostrar su información como nombre, dirección, etc. Mi grupo sanguíneo estructura de la base es como el siguiente.

Donante:

 O+:
      einsein:
           name: einstein
           email: [email protected]
           bloodgroup: O+
           age: 20
           address: 11/237
 A-:
      thamizh:
           name: thamizh
           email: [email protected]
           bloodgroup: A-
           age: 21
           address: 11/23.
public class userinfo extends AppCompatActivity {

    TextView t1,t2,t3,t4,t5;
    DatabaseReference oref;
    FirebaseAuth auth;
    FirebaseUser user;
    String uid,email;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_userinfo);

        auth = FirebaseAuth.getInstance();
        user = auth.getCurrentUser();
        uid = user.getUid();
        email = user.getEmail();
        t1 = (TextView) findViewById(R.id.l11);
        t2 = (TextView) findViewById(R.id.l22);
        t3 = (TextView) findViewById(R.id.l33);
        t4 = (TextView) findViewById(R.id.l44);
        t5 = (TextView) findViewById(R.id.l55);

        oref = FirebaseDatabase.getInstance().getReference().child("Donor");
        oref.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                String  name = dataSnapshot.child("donorID").getValue().toString();
                String  bldgrp = dataSnapshot.child("bloodgroup").getValue().toString();
                String  mob = dataSnapshot.child("mobile").getValue().toString();
                String  eid = dataSnapshot.child("email").getValue().toString();
                String  add = dataSnapshot.child("address").getValue().toString();
                t1.setText(name);
                t2.setText(bldgrp);
                t3.setText(mob);
                t4.setText(eid);
                t5.setText(add);

                }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
    }
}
Frank Puffelen:

En este momento se está cargando el código de todos los usuarios de la base de datos, y luego intenta leer las propiedades de uno de esos usuarios desde el /Donornodo. Eso no funcionará.

Por lo menos que necesita para recorrer los usuarios de la onDataChange:

oref = FirebaseDatabase.getInstance().getReference().child("Donor");
oref.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot snapshots) {
        for (DataSnapshot dataSnapshot: snapshots.getChildren()) {
            String  name = dataSnapshot.child("donorID").getValue().toString();
            String  bldgrp = dataSnapshot.child("bloodgroup").getValue().toString();
            String  mob = dataSnapshot.child("mobile").getValue().toString();
            String  eid = dataSnapshot.child("email").getValue().toString();
            String  add = dataSnapshot.child("address").getValue().toString();
            t1.setText(name);
            t2.setText(bldgrp);
            t3.setText(mob);
            t4.setText(eid);
            t5.setText(add);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        throw databaseError.toException(); // never ignore errors
    }
});

El código anterior todavía se pone todos los nodos hijos de /Donor, pero ahora coloca a través de ellos y establece las propiedades de la vista de texto. Ya que sólo tienen las vistas de texto para un usuario, va a sobrescribir los valores anteriores cada vez. Así que al final tendrá las propiedades para el último usuario de la JSON. Eso no es lo que quiere, pero al menos es mejor que la que tiene actualmente.


Lo siguiente está cargando sólo los datos de un solo usuario que desea mostrar. Esto requiere que se puede identificar que un solo usuario.

La forma más común de hacer esto, es almacenar los datos en su base de datos bajo el UID de ese usuario. Entonces:

Users: {
  "uidOfUser1": { ... },
  "uidOfUser2": { ... },
  "uidOfUser3": { ... }
}

Con este tipo de estructura se puede obtener una referencia a los datos para el iniciado sesión con el usuario:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
oref = FirebaseDatabase.getInstance().getReference()
                       .child("Donor")
                       .child(uid);

Si se agrega al oyente a esta referencia, puede eliminar el bucle que acaba de agregar, ya que sólo se va a cargar los datos de un usuario.


Eso deja la pregunta: ¿qué hacer si no se almacena la información del usuario bajo su UID? En ese caso, te recomiendo primero teniendo en cuenta la reestructuración de los datos, como el almacenamiento de datos de usuario en los UID es la forma idiomática para obtener rápida y fácil las búsquedas.

Pero a veces realmente se puede reestructurar, y en ese caso se puede realizar una consulta de base de datos para encontrar el nodo (s) para un usuario. Para poder utilizar una consulta, debe conocer el valor de uno (preferiblemente único) propiedad del usuario.

Digamos que usted sabe su dirección de correo electrónico. A continuación, puede obtener el nodo (s) de esa dirección de correo electrónico con:

FirebaseDatabase.getInstance().getReference()
                .child("Donor")
                .orderByChild("email").equalTo("[email protected]");

Cuando se conecta a su oyente a esta consulta, es posible obtener múltiples resultados de nuevo, por lo que necesita el mismo bucle for que hemos añadido anteriormente.

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=409311&siteId=1
Recomendado
Clasificación