Obtenga la ID empujada para un valor específico en firebase android

Quiero recuperar el ID que generó firebase cuando empujé valor a él como el siguiente

Base de fuego

Quiero recuperar "-KGdKip …." este id para ese correo electrónico lo intenté por getKey (), pero devolver "usuarios" y cuando el usuario obtener valor que devolver todo el objeto de la identificación de perfil picuter y que no Haz que lo consiga como objeto de usuario en mi aplicación

¿Cómo resolver esto?

Firebase users = myFirebaseRef.child("users"); users.orderByChild("email").equalTo("[email protected]").addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { dataSnapshot.getKey(); Log.d("User",dataSnapshot.getRef().toString()); Log.d("User",dataSnapshot.getValue().toString()); } @Override public void onCancelled(FirebaseError firebaseError) { Log.d("User",firebaseError.getMessage() ); } }); 

Puede leer la tecla desde push () sin empujar los valores. Más adelante puede crear un niño con esa clave y empujar los valores para esa clave.

 String mGroupId = mGroupRef.push().getKey(); .... .... mGroupRef.child(mGroupId).setValue(new ChatGroup()); 

mGroupId contiene la clave que se utiliza para indexar el valor que está a punto de guardar.

UPDATE 1: se puede obtener también por una línea

 String key = mDatabase.child("posts").push().getKey(); 

// ************************************************ ************** //

Después de buscar y probar un montón de cosas he venido a 2 maneras de hacer eso. 1. primero uno para obtener la clave cuando cargue la publicación en el servidor a través de esta función

  public void uploadPostToFirebase(Post post) { DatabaseReference mFirebase = mFirebaseObject .getReference(Constants.ACTIVE_POSTS_KEY) .child(post.type); mFirebase.push().setValue(post); Log.d("Post Key" , mFirebase.getKey()); } 
  1. Lo he utilizado en mi código para obtener la clave después de que ya he empujado a nodo para que en mi base de datos

     public void getUserKey(String email) { Query queryRef = databaseRef.child(Constants.USERS_KEY) .orderByChild(Constants.USERS_EMAIL) .equalTo(email); queryRef.addChildEventListener(new ChildEventListener() { @Override public void onChildAdded(DataSnapshot dataSnapshot, String s) { //TODO auto generated } @Override public void onChildChanged(DataSnapshot dataSnapshot, String s) { //TODO auto generated; } @Override public void onChildRemoved(DataSnapshot dataSnapshot) { //TODO auto generated; } @Override public void onChildMoved(DataSnapshot dataSnapshot, String s) { //TODO auto generated } @Override public void onCancelled(DatabaseError databaseError) { //TODO auto generated } }); } 

Cuando desencadena una consulta Firebase consulta puede potencialmente ser múltiples resultados. Por lo tanto, cuando solicita el valor de una consulta, Firebase devuelve una lista de elementos. Incluso si sólo hay un elemento coincidente, será una lista de un elemento.

Así que tendrás que manejar esta lista en tu oda:

 users.orderByChild("email").equalTo("[email protected]").addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { for (DataSnapshot child: dataSnapshot.getChildren()) { Log.d("User key", child.getKey()); Log.d("User ref", child.getRef().toString()); Log.d("User val", child.getValue().toString()); } } 

Lo resolví para obtener la identificación que necesita para utilizar URL firebase

 String uid = firebaseRef.child("users").push().getKey(); Log.i("uid", uid); 

Esto le dará la clave KG.....

En Java – Android Studio, puede obtener el identificador único empujado como el elemento se escribe en el db …

Por "Firebase's: Guardar datos en Android": Puede utilizar la referencia a los nuevos datos devueltos por el método push () para obtener el valor de la clave auto generada del niño o establecer datos para el niño. Llamar a getKey () en una referencia push () devuelve el valor de la clave generada automáticamente.

Para obtener la referencia en tiempo de escritura, en lugar de cargar DATOS con un solo …

  • Use push () para crear un registro en blanco en la base de datos, el valor de retorno es la referencia del registro.
  • Use .getKey () para obtener la clave para ese registro.
  • Use .setValue (DATA) para completar el registro en blanco

He aquí un ejemplo:

  FirebaseDatabase fb_db_instance = FirebaseDatabase.getInstance(); DatabaseReference db_ref_Main = fb_db_instance.getReference("string_db_Branch_Name"); hashMap_record = new HashMap<String, String>(); //some random data hashMap_record.put("key_Item1", "string_Item1"); hashMap_record.put("key_Item2", "string_Item2"); DatabaseReference blankRecordReference = db_ref_Main ; DatabaseReference db_ref = blankRecordReference.push(); //creates blank record in db String str_NEW_Records_Key = db_ref.getKey(); //the UniqueID/key you seek db_ref.setValue( hashMap_record); //sets the record 

Para aquellos que utilizan Tutoriales de TVAC ( https://www.youtube.com/watch?v=cSMMWOHkP68&list=PLGCjwl1RrtcTXrWuRTa59RyRmQ4OedWrt&index=16 )

Puede obtener Clave utilizando el método onClick de la siguiente manera:

  viewHolder.mView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String key = getRef(position).getKey(); } }); 

Simplemente agrega un nuevo campo a Usuarios como userID, cuando crees un nuevo User add uid y lo puedes recibir leyendo query

Lo estoy haciendo así.

 String userID;// in Users Firebase users = myFirebaseRef.child("users"); users.orderByChild("email").equalTo("[email protected]").addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { Users user= dataSnapshot.getChildren().iterator().next().getValue(Users.class); Log.d("User",user.getUserID()); } @Override public void onCancelled(FirebaseError firebaseError) { Log.d("User",firebaseError.getMessage() ); } }); 

Otra opción para obtener el post-id único de firebase es obtener clave ( dataSnapshot.getKey () ) en método @Override public void onChildAdded y mantenerlo localmente por ejemplo

 private void attachDatabaseReadListener() { if (mTaskEventListener == null) { mTaskEventListener = new ChildEventListener() { @Override public void onChildAdded(DataSnapshot dataSnapshot, String s) { Task friendlyMessage = dataSnapshot.getValue(Task.class); friendlyMessage.setId(dataSnapshot.getKey()); System.out.println("friendlyMessage = " + friendlyMessage); DummyContent.ITEMS.add(new DummyContent.DummyItem("" + DummyContent.ITEMS.size()+1,friendlyMessage.getStatus(),friendlyMessage.getSummary())); } public void onChildChanged(DataSnapshot dataSnapshot, String s) {} public void onChildRemoved(DataSnapshot dataSnapshot) {} public void onChildMoved(DataSnapshot dataSnapshot, String s) {} public void onCancelled(DatabaseError databaseError) {} }; mUserDatabaseReference.addChildEventListener(mTaskEventListener); // remove it } } 

DataSnapshot.getKey establecerá el identificador de publicación único en la instancia de tarea y puede utilizarse posteriormente para realizar cualquier operación de actualización.

  • Parámetros de eventos personalizados de Firebase Analytics
  • Firebase Crash Library - NullPointerException en la consola
  • Firebase onTokenRefresh () no se llama
  • Android Auth Error: "GetToken falló con el código de estado: INVALID_AUDIENCE"
  • No se pudo resolver: com.google.firebase: firebase-storage-common: 11.0.1
  • Error: Error al resolver: com.twitter.sdk.android:twitter:2.3.0 - Android Studio
  • ¿Cómo obtener la hora actual del servidor firebase en milisegundos?
  • ValueEventListener vs ChildEventListener para RecyclerView en Android
  • FirebaseRecyclerAdapter con vista vacía
  • Google Firebase serializar / deserializar
  • Android - Iniciar la consulta de base de datos de Firebase no funciona como se esperaba
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.