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

时间:2016-08-26 12:13:42

标签: java android firebase

我创建的Firebase数据如下:

enter image description here

我需要获取第二个对象的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);
}

1 个答案:

答案 0 :(得分: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) {
                }
            });

建议:

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

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

然后只使用"帖子"用于数据库参考。

使用查询:

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) {

                    }
                });