Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.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/4/c/55.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 将接收到的数据集导出到数组_Java_Dataset_Export_Firebase - Fatal编程技术网

Java 将接收到的数据集导出到数组

Java 将接收到的数据集导出到数组,java,dataset,export,firebase,Java,Dataset,Export,Firebase,我需要将数据从firebase数据集导出到数组。这是我的密码: Firebase fb = new Firebase("https://----.firebaseio.com/"); Query q = fb.orderByKey(); q.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot snapshot) { it

我需要将数据从firebase数据集导出到数组。这是我的密码:

Firebase fb = new Firebase("https://----.firebaseio.com/");
Query q = fb.orderByKey();

q.addValueEventListener(new ValueEventListener() {

    @Override
    public void onDataChange(DataSnapshot snapshot) {
        iterator = snapshot.getChildren().iterator();
        while (iterator.hasNext()) {
            // The code I need goes here
        }

    }

    @Override
    public void onCancelled(FirebaseError firebaseError) {
        System.out.println("The read failed: " + firebaseError.getMessage());
    }
});

这段代码在一个应该返回数据数组的方法中,但是将其导出到封闭方法中的局部变量并不能完成这项工作。有人有更好的方法吗?提前感谢。

回调将被异步调用,这意味着它可能不会在方法完成之前发生

听起来您希望有一个方法,当调用该方法时,它将查询数据的最新状态。您可以做的是创建firebase连接,将侦听器附加到方法外部(可能在
main
方法内部),并让方法查询侦听器以获取最新数据

class CustomValueListener implements ValueEventListener {    
    private volatile DataSnapshop data; //accessed from multiple threads
    @Override
    public void onDataChange(DataSnapshot snapshot) {
        data = snapshot;
    }    
    @Override
    public void onCancelled(FirebaseError firebaseError) {}
    public DataSnapshot getLatestData() {
        return data;
    }
}
private CustomValueListener listener = new CustomValueListener();

public static void main(String...args) {
     ...     
     Firebase fb = new Firebase("https://----.firebaseio.com/");
     Query q = fb.orderByKey();    
     q.addValueEventListener(listener);
     ...
}
String[] yourMethod() {
     ...
     Sring[] result = ...
     DataSnapshot snapshot = listener.getLatestData();
     if (snapshot != null) {
        iterator = snapshot.getChildren().iterator();
         while (iterator.hasNext()) {
            //now you can copy the data into the array 
         }
     }
     return result;
}

在调用
onDataChange
回调之前,您是否希望调用
addValueEventListener
会阻止此代码所在的方法的执行?@cyon我所需要的只是将该数据导出到可在该方法中使用的变量。因此,是的,调用应该会阻止执行,直到检索到数据为止。下次数据更改时会发生什么?@cyon每当调用该方法时,数据都会重新加载到数组中。我尝试了这段代码,在yourMethod()中的快照变量上得到了NullPointerException。顺便说一句,我将
main
中的代码放入我的类的构造函数中。@SalmonKiller尝试在
onDataChange
onCancelled
方法中放置一些日志,或者在调试时尝试在那里放置断点。可能是您在连接firebase时遇到问题。问题是请求是异步的。我加了一个信号灯,它就开始工作了。谢谢你的帮助。