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:它也可以通过一行获得
Run Code Online (Sandbox Code Playgroud)String key = mDatabase.child("posts").push().getKey();
//***********************//
在搜索并尝试了很多事情后,我找到了两种方法.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)
我在我的代码中使用它来获取密钥后我已经将它推送到我的数据库中的节点
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)
在Java - Android Studio中,当项目写入db时,您可以获得唯一的推送ID ...
根据"Firebase:在Android上保存数据":您可以使用对push()方法返回的新数据的引用来获取子项自动生成的键的值或为子项设置数据.在push()引用上调用getKey()会返回自动生成的键的值.
要在写入时获取引用,而不是使用单个push()加载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.....
归档时间: |
|
查看次数: |
70497 次 |
最近记录: |