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

时间:2014-12-29 04:10:40

标签: 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) {
        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());
    }
});

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

1 个答案:

答案 0 :(得分:2)

将以异步方式调用回调,这意味着在方法完成之前可能没有发生回调。

听起来你想要一个方法,在调用时会查询数据的最新状态。您可以做的是创建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;
}