获取firebase android中特定值的推送ID

Sat*_*tar 30 android firebase firebase-realtime-database

当我像下一个把值推到它时,我想要检索firebase生成的id

火力地堡

我想检索"-KGdKiPSODz7JXzlgl9J"这个id我为getKey()尝试的那个电子邮件,但它返回"用户",当用户获取值时,它将整个对象从id返回到个人资料图片,这不会让我得到它作为我的应用中的用户对象

怎么解决这个?

    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() );
        }
    });
Run Code Online (Sandbox Code Playgroud)

Sam*_*ert 64

您可以在不推送值的情况下从push()读取密钥.稍后您可以使用该键创建一个子项并按下该键的值.

// read the index key
String mGroupId = mGroupRef.push().getKey();
....
....
// create a child with index value
mGroupRef.child(mGroupId).setValue(new ChatGroup());
Run Code Online (Sandbox Code Playgroud)

mGroupId 包含用于索引要保存的值的键.


Sat*_*tar 21

更新1:它也可以通过一行获得

String key = mDatabase.child("posts").push().getKey();
Run Code Online (Sandbox Code Playgroud)

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

在搜索并尝试了很多事情后,我找到了两种方法.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());
 }
Run Code Online (Sandbox Code Playgroud)
  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 
          }
      });
     }
    
    Run Code Online (Sandbox Code Playgroud)


Fra*_*len 14

当您触发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());
        }
    }
Run Code Online (Sandbox Code Playgroud)


WM1*_*WM1 8

在Java - Android Studio中,当项目写入db时,您可以获得唯一的推送ID ...

根据"Firebase:在Android上保存数据":您可以使用对push()方法返回的新数据的引用来获取子项自动生成的键的值或为子项设置数据.在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 
Run Code Online (Sandbox Code Playgroud)


小智 6

我解决了它以获得你需要使用firebase网址的id

String uid = firebaseRef.child("users").push().getKey();
Log.i("uid", uid);
Run Code Online (Sandbox Code Playgroud)

这会给你钥匙 KG.....