【发布时间】:2020-07-23 11:01:42
【问题描述】:
我正在尝试从我的 Firebase 数据库中检测值变化。这是我初始化 ValueEventListener 的代码:
valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
try {
String customerLocation = String.valueOf(dataSnapshot.getValue());
Point customerPoint = locationFounder.getPoint(customerLocation);
if (customerPoint != null) {
databaseReference.child("isActive").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
boolean isActive = Boolean.valueOf(String.valueOf(dataSnapshot.getValue()));
displayPopUp(isActive, customerPoint, customerLocation);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
} catch (Exception e) {
Log.d("Listener",e.toString());
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
};
destinationReference.addValueEventListener(valueEventListener);
当我想在我的活动中调用此侦听器时出现问题。我一直在尝试这个:
destinationListener.getValueEventListener().onDataChange(REQUIRED_SNAPSHOT);
我不知道如何获取 onDataChange 所需的数据快照。如果可能的话,我想使用 ValueEventListener 而不是 ChildEventListener 来完成这项工作。但是,我不太确定这是尝试检测值变化的正确方法。如果有任何其他方式可以正常工作,我想知道它。
【问题讨论】:
-
您无法创建自己的
DataSnapshot。为什么需要这样做? -
因为我需要快照作为参数来调用函数destinationListener.getValueEventListener().onDataChange(REQUIRED_SNAPSHOT); (我将它命名为 REQUIRED_SNAPSHOT 因为我不知道应该在那里)。但是,如果您知道任何其他方法可以做到这一点,如果您能提供帮助会很好:)
-
这似乎是XY problem。为什么需要在代码中进行调用?我从来不需要自己调用监听器,只依靠 Firebase 来调用它们。
-
在这里参考您的答案:stackoverflow.com/questions/51367944/… 我试图在我的应用程序中实现它。但是,我再次说我不确定这是正确的方法,但我愿意学习如何检测 Firebase 数据库中的特定值何时发生变化。谢谢!
-
假设您有以前数据的快照。正如我在第一条评论中所说,您不能自己创建快照。
标签: java android firebase firebase-realtime-database event-listener