如何在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];