- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试执行一些基本的 Firebase 操作,但是 childEventListener 的行为不符合预期。
我有一个餐厅订单列表,我使用 Firebase 查询和 ChildEventListener 将其显示在列表中。该查询用于获取所有未煮熟的订单,即 WHERE cooked = false。
FirebaseDatabase mFirebaseDatabase = FirebaseDatabase.getInstance();
mDatabaseReference = mFirebaseDatabase.getReference().child(UUID + "/" + outletID + "/orders");
Query query = mDatabaseReference.orderByChild("cooked").equalTo(false);
mChildEventListener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Log.e(TAG, "ChildEventListener() - onChildAdded - " + dataSnapshot.getKey());
Order order = dataSnapshot.getValue(Order.class);
mAdapter.addOrder(order);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
Log.e(TAG, "ChildEventListener() - onChildChanged - " + dataSnapshot.getKey());
Order order = dataSnapshot.getValue(Order.class);
mAdapter.updateOrder(order);
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
Log.e(TAG, "ChildEventListener() - onChildRemoved - " + dataSnapshot.getKey() + ", exist - " + dataSnapshot.exists());
Order order = dataSnapshot.getValue(Order.class);
mAdapter.removeOrder(order);
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
Log.e(TAG, "ChildEventListener() - onChildMoved - " + dataSnapshot.getKey());
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w(TAG, "ChildEventListener : onCancelled - ", databaseError.toException());
}
};
query.addChildEventListener(mChildEventListener);
这工作正常,它提取了正确的数据。
我有另一个列表,其中包含所有已煮熟的订单,即 WHERE cooked = true。我为此使用一次性事件监听器并按预期显示正确的数据。
Query query = mDatabaseReference.orderByChild("cooked").equalTo(true);
在我的熟食订单列表中,当用户点击订单时,意味着将熟食标志更新回“false”并出现在未熟食订单列表中。这是使用以下 setValue() 方法完成的。
mDatabaseReference.child(order.getPushID()).child("cooked").setValue(false);
问题 1
当我加载 Activity 并且没有未煮熟的订单时,这就是问题发生的地方。当我点击熟食订单时,Firebase 数据库按预期更新熟食标志,但按预期调用了 onChildAdded(),但订单对象数据为空。之后,我还收到了带有订单对象数据的 onChildChanged 调用。
当我继续点击熟食订单时,它会按预期使用正确的数据调用 onChildAdded() 一次。所以从技术上讲,我错过了由于空数据而煮熟的第一个订单。
如果我加载具有 1 个或多个未煮熟订单的 Activity ,然后点击一个煮熟订单,将按预期调用 onChildAdded() 并更新未煮熟订单列表。
我尝试将 setValue() 更改为 updateChildren() 但结果仍然相同。
最佳答案
通常,当您使用多个 setValue 操作为一个对象编写多个属性时,Firebase 会重现此类问题。我建议以下场景:
\orders
,调用了 onChildAdded
,但这是空的,因为它的 cooked
属性是 false
。Cooked
属性设置为 false
。 onChildUpdated
按您需要的顺序调用。也许这不是您所做的,而是它在幕后的实现方式。也许您可以只使用 onChildUpdated
?
关于android - Firebase onChildAdded 返回空数据,然后在更新子项后返回 onChildChanged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46424055/
我有一个问题,就是 onChildAdded() 被无缘无故地调用,并且当添加某些东西时它确实工作正常 这是监听器: comment = new Firebase(MY_URL).child(
我想在我的 firebase 数据库中获取“服装”引用下的所有 firebase 节点。为此,我将 ChildEventListener 附加到引用,并在 onChildAdded 回调中将 Clot
我的代码有问题,不知道是不是因为onChildAdded或者RecyclerView才搞定的 简单地我想在 RecyclerView 上显示消息收件箱,其中包含我从其他用户收到的所有消息,每条消息都包
我正在使用 Firebase 开发一个实时检索数据的应用程序。我有 2 个设备,并连接到 Firebase,当第一个设备向 Firebase 添加一些数据时,第二个设备的工作是获取这些数据。但它始终为
如果我的 firebase 引用中存储了一个包含 50,000 个项目的列表,并且自上次客户端在线和监听以来已将 5 个项目添加到该列表中,我必须使用哪个回调以便仅触发它对于已添加的 5 个新项目?
我正在 SearchTextView OnQueryListener 中调用 OnChildAdded 方法,该方法使用 OnChildAdded 方法在对话框中搜索和显示记录。但是当我运行代码时,O
public class DataService { private static DataService ourInstance = new DataService(); priva
我在我的项目中使用 Database Firebase。我对 onChildAdded 非常困惑。我有这样的代码: mEventListener = new ChildEventListener()
如何处理 firebase android 中的 onChildAdded 事件。下面是我的数据库json结构 { message{ "id"=10;
假设我有一个 Firebase 数据库位置 /foo,现在它下面有五个 child 。我预计在接下来的几分钟内会添加更多的 child 。我在这个数据库引用上有一个子事件监听器,当我按预期添加监听器时
我正在尝试执行一些基本的 Firebase 操作,但是 childEventListener 的行为不符合预期。 我有一个餐厅订单列表,我使用 Firebase 查询和 ChildEventListe
我将 firebase ChildEventListner 用于聊天应用程序。在这个应用程序中,我在 onChildAdded 中传递条件,即如果消息 senderId 添加的新 child 比在 A
firestore是否支持(添加文档监听器),就像firebase实时 firebase real time 有这样的方法 public void onChildAdded(DataSnapshot
考虑以下代码示例: // Get a reference to our posts Firebase ref = new Firebase("https://docs-examples.firebas
我是 Firebase 的新手,正在做一个简单的项目。我有一种方法可以从 Firebase 获取教师列表并将他们的电子邮件添加到 ArrayList 并返回。 public ArrayList get
这是显示输出的控制台屏幕截图,即添加到其中一个用户的消息目录中的子项。 另外,必须注意的是,我显示了控制台的非常短的部分,因为控制台为每条消息显示类似的输出。如果需要更多屏幕截图来澄清,请告诉我,我会
每当我使用 updateChildren() 方法时,我的 onChildAdded() 方法似乎都不起作用。它与 push().setValue() 方法配合使用。这两种方法都可以将数据发送到 Fi
我正在按照以下代码向 Firebase 添加新数据 updateChildren(childUpdates, new DatabaseReference.CompletionListener() {
我是一名优秀的程序员,十分优秀!