如何识别最终查询?
How to identify a finalized query?
我在 firebase 参考中执行了一个查询(异步的)。我需要知道这次咨询什么时候结束,以便在加载数据后做出决定。已经研究和思考了很多,我想不出解决办法。
Firebase refEventTypeFirebase = refUserPrivate.child(EventType.EventTypeEnum.NODE_NAME.text);
Query queryEventType = refEventTypeFirebase .orderByKey();
queryEventType.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
// If I have several children in the query,
// this method will be called several times until the last "dataSnapshot".
//How to identify the last time he runs into a given query?
}
...
在 Firebase 中,查询永远不会完成。相反,它会同步数据,包括在您附加侦听器之前存在的数据 和附加侦听器之后出现的任何新数据 。因此,您无需等待查询结果,而是监听所有数据(现有的和新的)并在您不再关心数据时停止监听。
如果只关心当前数据,可以附加一个单值事件监听器:
queryEventType.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChanged(DataSnapshot snapshot) {
for (DataSnapshot child: snapshot.getChildren()) {
// do the thing that you were going to do in onChildAdded
}
}
...
但是如果采用这种方法,您将放弃 Firebase 的最大优势之一。围绕数据变化这一事实构建您的应用程序逻辑通常更好,并且您将实时接收这些变化。
我在 firebase 参考中执行了一个查询(异步的)。我需要知道这次咨询什么时候结束,以便在加载数据后做出决定。已经研究和思考了很多,我想不出解决办法。
Firebase refEventTypeFirebase = refUserPrivate.child(EventType.EventTypeEnum.NODE_NAME.text);
Query queryEventType = refEventTypeFirebase .orderByKey();
queryEventType.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
// If I have several children in the query,
// this method will be called several times until the last "dataSnapshot".
//How to identify the last time he runs into a given query?
}
...
在 Firebase 中,查询永远不会完成。相反,它会同步数据,包括在您附加侦听器之前存在的数据 和附加侦听器之后出现的任何新数据 。因此,您无需等待查询结果,而是监听所有数据(现有的和新的)并在您不再关心数据时停止监听。
如果只关心当前数据,可以附加一个单值事件监听器:
queryEventType.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChanged(DataSnapshot snapshot) {
for (DataSnapshot child: snapshot.getChildren()) {
// do the thing that you were going to do in onChildAdded
}
}
...
但是如果采用这种方法,您将放弃 Firebase 的最大优势之一。围绕数据变化这一事实构建您的应用程序逻辑通常更好,并且您将实时接收这些变化。