如何在firebase android中检索父密钥

如何在firebase android中检索父密钥,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我想检索houfxWvbwyVmbHX60IGjpNkZR9w2键,怎么办 下面是相同的代码 mQuery = mfollowing.orderByChild("following").equalTo(user_id); mQuery.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) {

我想检索
houfxWvbwyVmbHX60IGjpNkZR9w2
键,怎么办

下面是相同的代码

mQuery = mfollowing.orderByChild("following").equalTo(user_id);
mQuery.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {


        final String key = dataSnapshot.getKey();

        mdatabaseUsers.child(user_id).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                DatabaseReference newfollscreen = mdatabaseFollwer.child(key).child(newPost.getKey());

                newfollscreen.child("screen").setValue(downloadUrl.toString());
                newfollscreen.child("engagement").setValue("NA");
                newfollscreen.child("url").setValue("NA");
                newfollscreen.child("uid").setValue(user_id);
                newfollscreen.child("name").setValue(dataSnapshot.child("name").getValue());
                newfollscreen.child("image").setValue(dataSnapshot.child("image").getValue()).addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {

                        if (task.isSuccessful()){

                            Toast.makeText(AddimageActivity.this, "Posted among your followers", Toast.LENGTH_SHORT).show();
                        }else {

                            Toast.makeText(AddimageActivity.this, "Error", Toast.LENGTH_SHORT).show();
                        }
                    }
                });
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });


    }

    @Override
    public void onCancelled (DatabaseError
       databaseError){

    }

});
mQuery=m follow.orderByChild(“following”).equalTo(用户id);
mQuery.addListenerForSingleValueEvent(新的ValueEventListener()){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
最后一个字符串key=dataSnapshot.getKey();
mdatabaseUsers.child(用户id).addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
DatabaseReference newfollscreen=mdatabasefollower.child(key.child)(newPost.getKey());
newfollscreen.child(“screen”).setValue(downloadUrl.toString());
newfollscreen.child(“约定”).setValue(“NA”);
newfollscreen.child(“url”).setValue(“NA”);
newfollscreen.child(“uid”).setValue(用户id);
newfollscreen.child(“name”).setValue(dataSnapshot.child(“name”).getValue());
newfollscreen.child(“image”).setValue(dataSnapshot.child(“image”).getValue()).addOnCompletListener(newOnCompletListener()){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
Toast.makeText(AddimageActivity.this,“在追随者中发布”,Toast.LENGTH_SHORT.show();
}否则{
Toast.makeText(AddimageActivity.this,“Error”,Toast.LENGTH_SHORT.show();
}
}
});
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
}
@凌驾
已取消的公共void(数据库错误
数据库错误){
}
});
这是Firebase数据库

第二张图像


我尝试使用子数据快照方法,但不起作用。如果您有一个指向子对象的
rhZ4…wt2
,您可以调用
snapsthot.getRef().toString()
,它将返回类似
https://xxx.firebaseio.com/.../houfxWvbwyVmbHX60IGjpNkZR9w2/rhZ4...wt2
。从那里可以提取父密钥

从您的示例中,在使用
mQuery
查询数据库后,在
onDataChange
内部有一个
DataSnapshot

因此,调用
dataSnapshot.getRef().toString()
将为您提供
https://xxx.firebaseio.com/.../houfxWvbwyVmbHX60IGjpNkZR9w2/rhZ4...wt2/following

提取父密钥的代码(将其放入第一个数据更改中):


parentKey
应该是您的
houfxwvbwyvmbhbx60igjpnkzr9w2

请共享您的代码,以便我们可以查看您已经尝试过的内容。我共享了我的代码,请查看。谢谢您是否要以字符串形式检索密钥名称(您使用了
getKey()
,可以这样做),或者您正在尝试以列表形式访问父节点?我想访问作为其他用户密钥的父节点。如中或更类似?另外,您的代码嵌套了多个事件侦听器,它是否按原样工作?你的最终目标是什么?@PuneetTawniya当然可以,你能让我知道你的代码中哪个变量表示密钥houfxWvbwyVmbHX60IGjpNkZR9w2吗?你的意思是问哪个数据库引用将我们与这个密钥(houfxWvbwyVmbHX60IGjpNkZR9w2)联系起来?我的意思是你代码中的哪个变量表示这个密钥houfxwvbwwwwwyvmbhx60igjpnkzr9w2?它是“mfollow”吗?实际上它没有任何变量,因为我需要找到那个键。但一旦我得到它,我就用“String key=data snapshot.getKey()”来命名它;
String reference = dataSnapshot.getRef().toString();
String[] tokens = reference.split("/");
String parentKey = tokens[tokens.length - 3];