如何在Firebase中动态获取密钥?

Cla*_*l X 2 java android firebase

我有像这样创建的Firebase数据:

在此输入图像描述

我需要获取第二个对象的ID.我试图使用getKey()方法,但它返回"Post"..我想获得唯一的ID.我使用此代码添加值:

private DatabaseReference refposts;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    context = this;
    refposts = FirebaseDatabase.getInstance().getReference("Posts");
    Posts posts = new Posts();
    posts.setTitle("Title2");
    posts.setDesc("Desc2?");
    posts.setWriter("user-1");
    refposts.child("Post").push().setValue(posts);
}
Run Code Online (Sandbox Code Playgroud)

MKJ*_*ekh 5

这是解决方案:

            DatabaseReference ref = database.getReference("Posts/Post");

            // Attach a listener to read the data at our posts reference
            ref.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {

                    for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                        Posts  post = postSnapshot.getValue(Posts .class);
                        //postSnapshot.getKey(); THIS IS YOUR UNIQUE KEY
                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {
                }
            });
Run Code Online (Sandbox Code Playgroud)

建议:

别 : refposts.child("Post").push().setValue(posts);

做的是: refposts.push().setValue(posts);

然后只使用"帖子"进行数据库参考.


要使用Query:

DatabaseReference myRef= database.getReference("Posts/Post");
    Query query = myRef.orderByChild("title").equalTo("Title2");
                query.addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {

                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                });
Run Code Online (Sandbox Code Playgroud)