Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.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数据库检索该值_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Java 无法从firebase数据库检索该值

Java 无法从firebase数据库检索该值,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我正在尝试从firebase数据库检索值 它正在onDataChange()函数中显示值,但无法显示其中的值 代码: 正如我在评论中提到的,对Firebase的调用是异步的。如果希望方法返回记录对象,则应使用回调: public void readtraditional(String email, MyCallback callback) { final Records record = new Records(); final String[] name = new Strin

我正在尝试从firebase数据库检索值

它正在onDataChange()函数中显示值,但无法显示其中的值

代码:


正如我在评论中提到的,对Firebase的调用是异步的。如果希望方法返回
记录
对象,则应使用回调:

public void readtraditional(String email, MyCallback callback)
{
    final Records record = new Records();
    final String[] name = new String[1];

    myRef.child(email).child("name").addValueEventListener(new 
    ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            name[0] = dataSnapshot.getValue().toString() ;                
            record.setName(name[0]);
            callback.onSuccess(record)
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });   

}
接口:

public interface MyCallback{
           void onSuccess(Records record)
}
您可以这样调用此方法:

readtraditional(mystring,new MyCallback{
        @Override
        void onSuccess(Records record){
            //do whatever you want
        }
});

来自Firebase的响应是异步的。当您尝试打印OnDataChange之外的值时,可能并没有收到服务器的任何响应,并且您的名称数组仍然为空,并且正在调用OnDataChangelater@matip,我知道这一点,但解决办法是什么。请参阅下面我的答案
readtraditional(mystring,new MyCallback{
        @Override
        void onSuccess(Records record){
            //do whatever you want
        }
});