web-dev-qa-db-ja.com

firebase androidの特定の値に対してプッシュされたIDを取得します

次のように値をプッシュしたときにfirebaseによって生成されたIDを取得したい

Firebase

「-KGdKiPSODz7JXzlgl9J」を取得したい私のアプリのユーザーオブジェクトとして

これをどのように解決しますか?

    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() );
        }
    });
30
Sattar

更新1:1行でも取得できます

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

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

多くのことを探して試した後、私はそれをする2つの方法に来ました。 1.この関数を介してサーバーに投稿をアップロードするときにキーを取得する最初の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());
 }
  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 
          }
      });
     }
    
21
Sattar

値をプッシュせずに、Push()からキーを読み取ることができます。後で、そのキーを持つ子を作成し、そのキーの値をプッシュできます。

// read the index key
String mGroupId = mGroupRef.Push().getKey();
....
....
// create a child with index value
mGroupRef.child(mGroupId).setValue(new ChatGroup());

mGroupIdには、保存しようとしている値にインデックスを付けるために使用されるキーが含まれています。

63
Samuel Robert

Firebaseクエリを実行すると、複数の結果が生じる可能性があります。そのため、クエリの値を要求すると、Firebaseはアイテムのリストを返します。一致するアイテムが1つしかない場合でも、1つのアイテムのリストになります。

したがって、コード内でこのリストを処理する必要があります。

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

Java-Android St​​udioでは、アイテムがデータベースに書き込まれるときに一意のプッシュIDを取得できます。

「Firebase's:Save Data on 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 
8
WM1

Firebase urlを使用するために必要なIDを取得するために解決しました

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

これはあなたにキーKG.....を与えます

6
Ekta Dushanj

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

          }
     });
3
sley_paloh

新しいユーザーを作成すると、userIDなどのユーザーに新しいフィールドを追加するだけで、クエリを読み取って受け取ることができます

私はこのようにやっています。

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() );
        }
    });
2
Qdza

私はこの問題に直面していましたが、解決策を見つけました。次のコードを使用して解決できます。

dataSnapshot.getChildren().iterator().next().getKey()
1

Firebaseから一意のPost-idを取得する別のオプションは、@ Overrideメソッドでキー(dataSnapshot.getKey())を取得することです。

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は、タスクインスタンスに一意の投稿IDを設定し、後で更新操作を実行するために使用できます。

1
Mayank
FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
DatabaseReference databaseReference1 = firebaseDatabase.getReference("users");
databaseReference1.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                for(DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {

                    String key = dataSnapshot1.getKey();
                    Log.d(TAG, "onCreate: key :" + key);

                    String email = dataSnapshot1.child("email").getValue(String.class);
                    String roomno =dataSnapshot1.child("address").getValue(String.class);
                    Log.d(TAG, "onDataChange: email: " + email);
                    Log.d(TAG, "onDataChange: address: " + address)
                }
            }
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
0
Akshat Jindal

FirebaseDatabase.getInstance().getReference(FConst.PATIENTS).Push().setValue(patient);

0
Qamar