Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.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-第三个子项中的getValue返回null_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Java Firebase-第三个子项中的getValue返回null

Java Firebase-第三个子项中的getValue返回null,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我有一个问题,当我想从firebase获取值时,getValue()returnnull DataSnapshot应用程序napshot和DataSnapshot DataSnapshot-在控制台中,我也能在Firebase中正确地看到键和值 数据库结构 调试 DataSnapshot设置-返回键但不返回值(null) 字符串设置键-正确返回字符串键 字符串设置值-返回null 为什么我不能从更深层次的孩子那里得到价值 private void readData(final Validat

我有一个问题,当我想从firebase获取值时,
getValue()
returnnull

DataSnapshot应用程序napshot
DataSnapshot DataSnapshot
-在控制台中,我也能在Firebase中正确地看到键和值

数据库结构

调试

DataSnapshot设置
-返回键但不返回值(null)

字符串设置键
-正确返回字符串键

字符串设置值
-返回null

为什么我不能从更深层次的孩子那里得到价值

private void readData(final ValidateJoinInterface validateJoinInterface, final String name, final String password, final String user) {

    DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
    ref.addListenerForSingleValueEvent(new ValueEventListener() {

        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot appleSnapshot : dataSnapshot.getChildren()) {

                DataSnapshot setting = appleSnapshot.child(name).child("Settings").child("Password");
                String settingKey = (String) appleSnapshot.child(name).child("Settings").child("Password").getKey();
                String settingValue = (String) appleSnapshot.child(name).child("Settings").child("Password").getValue();

            }
            validateJoinInterface.validateJoin(correctName, correctPassword, correctUserId);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Log.e("DTAG", "onCancelled", databaseError.toException());
        }
    });
}

您可以获得任何值,如:

FirebaseDatabase.getInstance().getReference().child(name).child("Settings").child("Password")
                .addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        for (DataSnapshot messageSnapshot : dataSnapshot.getChildren()) {
                            Log.d(TAG,"KEY - "+messageSnapshot.getKey() + "VALUE - "+messageSnapshot.getValue());
                        }
                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {
                        Crashlytics.logException(databaseError.toException());
                        sendMessageListener.onSendMessageFailure(databaseError.getMessage());
                    }
                });

假设
name
变量包含一个字符串值,如示例
Aa
中所示,并且假设
Aa
是Firebase根目录的直接子目录,要解决此问题,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference settingsRef = rootRef.child(name).child("Settings");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
            String name = dataSnapshot.child("Name").getValue(String.class);
            String password = dataSnapshot.child("Password").getValue(String.class);
            Log.d("TAG", name + " / " + password);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
settingsRef.addListenerForSingleValueEvent(valueEventListener);

输出将是:
Aa/Aaa

当您获取密钥时,返回什么密钥?您在哪里获取null?返回密钥“Password”,但不返回值“Aaa”,当我尝试从名称{“Settings”{“Password”:“null”}获取值时,我有null,但在站点和应用程序快照上的数据库中我有:name{“Settings”{“Password”:“Aaa”}密码节点后没有任何子节点或值。然后您将不会获得任何值,因此其返回null。谢谢Alex,我需要将appleSnapshot更改为dataSnapshot,现在我可以正确获取值。