Java 将接收到的数据集导出到数组
我需要将数据从firebase数据集导出到数组。这是我的密码: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 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时遇到问题。问题是请求是异步的。我加了一个信号灯,它就开始工作了。谢谢你的帮助。