Получить толкаемый идентификатор для определенного значения в firebase android

Я хочу получить идентификатор, созданный firebase, когда я подтолкнул к нему значение, как следующий

Firebase

Я хочу получить «-KGdKip ….» этот идентификатор для этого письма, который я попробовал getKey (), но он возвращает «пользователей», и когда пользователь получает значение, он возвращает весь объект от id к профилю picuter, и это не будет Заставить меня получить его как объект User в моем приложении

Как решить это?

Firebase users = myFirebaseRef.child("users"); users.orderByChild("email").equalTo("z@m.com").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() ); } }); 

Вы можете прочитать ключ от push (), не нажимая значения. Позже вы можете создать ребенка с этим ключом и нажать значения для этого ключа.

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

mGroupId содержит ключ, который используется для индексации значения, которое вы собираетесь сохранить.

ОБНОВЛЕНИЕ 1: он может также получить одну строку

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

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

После поиска и попыток много чего я пришел к 2 способам сделать это. 1. первый, чтобы получить ключ, когда я загружаю сообщение на сервер с помощью этой функции

  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()); } .  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. Я использовал его в своем коде, чтобы получить ключ после того, как я уже подтолкнул его к узлу для него в моей базе данных

     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 } }); } 

Когда вы запускаете запрос Firebase запроса, потенциально может быть несколько результатов. Поэтому, когда вы запрашиваете значение запроса, Firebase возвращает список элементов. Даже если есть только один соответствующий элемент, он будет списком одного элемента.

Таким образом, вам придется обрабатывать этот список в вашей оде:

 users.orderByChild("email").equalTo("z@m.com").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()); } } 

Я решил, что для получения идентификатора вам нужно использовать firebase url

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

Это даст вам ключ KG.....

В Java – Android Studio вы можете получить уникальный нажатый идентификатор, когда элемент записывается в db …

Per «Firebase's: Save Data for Android»: вы можете использовать ссылку на новые данные, возвращаемые методом push (), чтобы получить значение автогенерированного ключа ребенка или задать данные для ребенка. Вызов getKey () в ссылке push () возвращает значение автоматически сгенерированного ключа.

Чтобы получить ссылку на время записи, вместо загрузки DATA одним нажатием () …

  • Используйте push () для создания пустой записи в базе данных, возвращаемое значение является ссылкой записи.
  • Используйте .getKey (), чтобы получить ключ для этой записи.
  • Используйте .setValue (DATA), чтобы заполнить пустую запись

Вот пример:

  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 

Для тех, кто использует учебники TVAC ( https://www.youtube.com/watch?v=cSMMWOHkP68&list=PLGCjwl1RrtcTXrWuRTa59RyRmQ4OedWrt&index=16 )

Вы можете получить ключ, используя метод onClick, следующим образом:

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

Просто добавьте новое поле для пользователей, таких как userID, при создании нового User add uid, и вы можете его получить, прочитав запрос

Я делаю это так.

 String userID;// in Users Firebase users = myFirebaseRef.child("users"); users.orderByChild("email").equalTo("z@m.com").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() ); } }); 

Другой вариант получения уникального Post-id из firebase – это получить ключ ( dataSnapshot.getKey () ) в методе @Override public void onChildAdded и поддерживать его локально, например

 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 установит уникальный идентификатор сообщения в экземпляре задачи и может быть использован позже для выполнения любой операции обновления.