Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.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 Android的密钥值';路径字符串';在child()中_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Java 存储全局变量Firebase Android的密钥值';路径字符串';在child()中

Java 存储全局变量Firebase Android的密钥值';路径字符串';在child()中,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我试图将ds.getKey()的值存储到全局变量Common.workerType中,这样每当我需要从数据库中获取值时,我就不必重复这些代码集,更理想的情况是这样做 final DatabaseReference dbRefChild = dbRef.child(Common.user_workers_table).child(Common.workerType).child(Common.uid); 我知道显示错误是因为它获取了一个null数据,但是为什么会这样呢?我相信我找到了节点的正确路

我试图将ds.getKey()的值存储到全局变量Common.workerType中,这样每当我需要从数据库中获取值时,我就不必重复这些代码集,更理想的情况是这样做

final DatabaseReference dbRefChild = dbRef.child(Common.user_workers_table).child(Common.workerType).child(Common.uid);
我知道显示错误是因为它获取了一个
null
数据,但是为什么会这样呢?我相信我找到了节点的正确路径。这就是我得到的错误:

java.lang.NullPointerException: Can't pass null for argument 'pathString' in child()

以下是数据库的外观:

Common.user\u workers\u表指的是workers


Common.workerType指的是管道工

只需添加检查空值,如


if(Common.user\u workers\u table!=null)
当您得到child时

您不能将
Common.workerType
声明为o全局变量,只需在
onDataChange()
方法之外使用它,因为它总是
null
。之所以会发生这种情况,是因为该方法具有异步行为,这意味着甚至在您从数据库获取数据之前就调用了该方法

即使这是可能的,正如我在代码中看到的,您也在使用
getChildren()
方法遍历整个
dataSnapshot
对象,并将得到的每个值赋给同一个变量。在这种情况下,变量将始终具有上次迭代的值


第一个问题的一个快速解决方法是,仅在
onDataChange()
方法内部使用
Common.workerType
的值,或者如果需要在外部使用它,则深入异步世界并从此查看我的anwser的最后一部分。您还可以查看此以便更好地理解。

但是,这只会检查数据是否为null,我需要的是检索数据错误“child()中参数“pathString”不能传递null”表示您的子键==null,或者您得到了错误的子键。请检查一下,我一直在考虑这种可能性,但我需要一些保证,谢谢@alex再次救我!哈哈,我没有把它设为一个全局变量,而是在需要的时候重复这些代码,听起来效率不高,但看起来已经足够让应用程序工作了。
    final DatabaseReference newRef = FirebaseDatabase.getInstance().getReference();
    final DatabaseReference newRefChild = newRef.child(Common.user_workers_table);

    newRefChild.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot ds: dataSnapshot.getChildren()) {
                if(ds.child(Common.uid).exists()) {
                    Common.workerType = ds.getKey();
                }
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });