Android: conseguir que el niño del niño

LizG:

Estoy tratando de obtener el "estado" del paseo que se encuentra actualmente en mi nodo de "Historia", pero primero tenía que conseguir la "rideKey".

Las variables globales: Cadena rideKey, clave de cadena.

nodo de la historia:

{
  "History" : {
    "-LGXaukR30LTjrL3ZNpt" : {
      "driver" : "ptnVOKounjXE9VrmZCCvKoZWluf1",
      "rating" : 0,
      "ridePrice" : 5.25,
      "rider" : "C0RjB5NPZcTvWz9XiUAhpTDOK0C2",
      "status" : "accepted",
      "timestamp" : 1530662726
    }
  }
}

Para obtener el rideKey, hice esto:

    DatabaseReference keyRef = FirebaseDatabase.getInstance().getReference("History");
    keyRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            rideKey = String.valueOf(mDatabase.child("History").push().getKey());
            Log.d(TAG, "getKey: key = " + rideKey);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {}
    });

Esto me todas las claves de la historia da, ¿cómo puedo obtener la más reciente?

Ahora bien, yo, también es necesario para obtener el "status" de la solicitud.

Sin embargo, cuando intento para obtener el estado, que sigue apareciendo nula.
He intentado poner otro ValueEventListener dentro del evento valor rideKey pero aún nula

Alguna idea de lo que estoy haciendo mal? Muy apreciado.

EDITAR

Log.e(TAG, "I made it to getKeyAndStatus");

    DatabaseReference keyRef = FirebaseDatabase.getInstance().getReference("History");
    keyRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
**// Log.e(TAG, "I made it to getKeyAndStatus: onDataChange");**

            Iterable<DataSnapshot> children = dataSnapshot.child("History").getChildren();

            for (DataSnapshot child : children){
                Log.d(TAG, "getKey: key = " + child.getKey());

                Ride ride = child.getValue(Ride.class);
                Log.e(TAG, "ride = " + ride);

                Log.d(TAG, "Driver = " + ride.getDriver());
                Log.d(TAG, "Rating = " + ride.getRating());
                Log.d(TAG, "Rider = " + ride.getRider());
                Log.d(TAG, "Price = " + ride.getRidePrice());
                Log.d(TAG, "status = " + ride.getStatus());
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

El código anterior sólo lo hace por lo que el registro de "lo hice a getKeyAndStatus: onDataChange"

Edición - Resultados

resultados

Alex Mamo :

Para solucionar esto, por favor, utilice el siguiente código:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference historyRef = rootRef.child("History");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            Ride ride = ds.getValue(Ride.class);

            Log.d(TAG, "Driver = " + ride.getDriver());
            Log.d(TAG, "Rating = " + ride.getRating());
            Log.d(TAG, "Rider = " + ride.getRider());
            Log.d(TAG, "Price = " + ride.getRidePrice());
            Log.d(TAG, "status = " + ride.getStatus());
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
historyRef.addListenerForSingleValueEvent(valueEventListener);

La salida en el Logcat serán los valores de sus propiedades.

Tenga en cuenta, cuando se utiliza la siguiente línea de código:

rideKey = String.valueOf(mDatabase.child("History").push().getKey());

Estás generando otra tecla en vez de conseguir la existente. Utilice el push()método sólo cuando se agrega objetos no cuando se las lee.

Supongo que te gusta

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