绕过firebase中的push id节点

时间:2018-05-08 07:50:49

标签: java android firebase firebase-realtime-database

当我尝试获取推送ID的子节点的数据时,我得到一个null。我的结构看起来像这样 enter image description here 这是我获取消息数据的代码

DatabaseReference mMessageDatabase = FirebaseDatabase.getInstance().getReference().child("private_messages");
mMessageDatabase.child(User1).child(User2).addListenerForSingleValueEvent(new ValueEventListener() {

        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot != null) {

                // getting null in message
                String message = dataSnapshot.child("message").getValue(String.class);
                Log.e(TAG, "CHAT_LOG: " + message);
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

我的代码中是否有问题或我错过了代码?

编辑:

我尝试使用查询来测试它是否给我数据。继承我的代码

        messageDatabase.orderByChild("seen").equalTo("false")
                .addListenerForSingleValueEvent(new ValueEventListener() {

                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        if (dataSnapshot.exists()) {
                            for (DataSnapshot datas : dataSnapshot.getChildren()) {
                                String key = datas.getKey();
                                String seen = dataSnapshot.child(key).child("seen").getValue(String.class);
                                Log.e(TAG, "CHAT_LOG: Seen= " + seen);
                            }
                        }
                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                });

幸运的是它给了我一个数据。唯一的问题是得到消息。我在这里使用了一个查询,我需要给它一个特定的值。

1 个答案:

答案 0 :(得分:0)

尝试以下方法:

 mMessageDatabase.child(User1).child(User2).addListenerForSingleValueEvent(new ValueEventListener() {

    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if (dataSnapshot != null) {
           for(DataSnapshot datas: dataSnapshot.getChildren()){

            String message = datas.child("message").getValue(String.class);
            Log.e(TAG, "CHAT_LOG: " + message);
           }
        }
    }

由于快照位于User2,因此您可以在直接子项内循环,这是推送ID并检索子message的值