我需要将我的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());
}
});
此代码位于一个应该返回数据数组的方法内,但是在封闭方法中将其导出到局部变量不能完成这项工作。有没有人有更好的方法?提前谢谢。
答案 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;
}