Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 绕过firebase中的推送id节点_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Java 绕过firebase中的推送id节点

Java 绕过firebase中的推送id节点,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,当我试图获取push id的子节点的数据时,我得到了一个空值 这是我获取消息数据的代码 DatabaseReference mMessageDatabase = FirebaseDatabase.getInstance().getReference().child("private_messages"); mMessageDatabase.child(User1).child(User2).addListenerForSingleValueEvent(new ValueEventListener

当我试图获取push id的子节点的数据时,我得到了一个空值 这是我获取消息数据的代码

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

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

请尝试以下操作:

 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)内循环,并检索子对象
消息的值

,它不会给我任何值。我试图通过
dataSnapshot.getChildrenCount()检查它它表示0没有来自Log@xxxQDAxxx如果它根据编辑给你数据,那有什么问题?!我在FirebaseRecyclerAdapter和PopulateView中使用该代码。它始终显示子节点的最后一项密钥?您得到的结果如下
String key=datas.getKey()
也使用addValueEventListener而不是AddListener for SingleValueEventCand,请通过添加屏幕截图发布您的真实数据库结构?@AlexMamo我上传了图片