【问题标题】:How to retrieve parent key in firebase android如何在firebase android中检索父键
【发布时间】:2017-10-26 08:36:42
【问题描述】:

我想找回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){

    }

});

这是 Firebase 数据库

第二张图片

enter image description here

我尝试使用子数据快照方法但没有奏效。对此的任何帮助将不胜感激。

【问题讨论】:

  • 请分享您的代码,以便我们查看您已经尝试过的内容。
  • 我分享了我的代码,请看一下。谢谢你
  • 您想以字符串的形式检索键名(您已经使用了getKey(),它会这样做)还是尝试以列表的形式访问父节点?
  • 我想访问父节点,它是其他用户的键。
  • working with lists of data 还是更像how to get value of parent node as string?此外,您的代码嵌套了多个事件侦听器,它是否按原样工作?你的最终目标是什么?

标签: android firebase firebase-realtime-database


【解决方案1】:

假设您有一个指向孩子rhZ4...wt2DataSnapshot,您可以调用snapsthot.getRef().toString(),它会返回类似https://xxx.firebaseio.com/.../houfxWvbwyVmbHX60IGjpNkZR9w2/rhZ4...wt2 的内容。从那里您可以提取父密钥。

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

所以打电话给dataSnapshot.getRef().toString() 会给你https://xxx.firebaseio.com/.../houfxWvbwyVmbHX60IGjpNkZR9w2/rhZ4...wt2/following

提取父密钥的代码(将其放入您的第一个 onDataChange):

String reference = dataSnapshot.getRef().toString();
String[] tokens = reference.split("/");
String parentKey = tokens[tokens.length - 3];

这个parentKey 应该是你的houfxWvbwyVmbHX60IGjpNkZR9w2

【讨论】:

  • @PuneetTawniya 当然可以,你能告诉我哪个变量表示代码中的密钥 houfxWvbwyVmbHX60IGjpNkZR9w2 吗?
  • 您的意思是问哪个数据库引用将我们与此密钥 (houfxWvbwyVmbHX60IGjpNkZR9w2) 联系起来?
  • 我的意思是你的代码中的哪个变量指的是这个键 houfxWvbwyVmbHX60IGjpNkZR9w2?是“mfollowing”吗?
  • 实际上它没有任何变量,因为我需要找到那个键。
  • 但是一旦我得到它,我将它命名为“String Key = data snapshot.getKey()”;
猜你喜欢
  • 2018-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-08
  • 1970-01-01
  • 2018-03-21
相关资源
最近更新 更多