gpt4 book ai didi

java - 使用 firebase ValueEventListener 检测值变化

转载 作者:行者123 更新时间:2023-12-01 17:29:44 26 4
gpt4 key购买 nike

我正在尝试检测 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);

当我想在我的 Activity 中调用此监听器时,会出现问题。我一直在尝试这样做:

destinationListener.getValueEventListener().onDataChange(REQUIRED_SNAPSHOT);

我不知道如何获取 onDataChange 所需的数据快照。如果可能的话,我想使用 ValueEventListener 而不是 ChildEventListener 来完成这项工作。但是,我不太确定这是尝试检测值变化的正确方法。如果还有其他可以正常工作的方法,我想知道。

最佳答案

Firebase 实时数据库没有构建任何内容来告诉您快照下的哪些特定数据在 onDataChange 方法中发生了更改。

如果您想知道哪些特定属性发生了变化,您需要:

  1. 将您在 onDataChange 中获得的快照保留在字段中。
  2. 当调用 onDataChange 时,将新快照中的数据与字段中的数据进行比较。

假设您在 JSON 中的某个节点上有一个引用,并且该节点下有一个 status 属性,并且您希望监听整个节点,并检测 状态已更改。

你可以这样做:

// Add a field to your class to keep the latest snapshot
DataSnapshot previousSnapshot;

// Then add your listener
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
bool wasActive = false;
if (previousSnapshot != null && previousSnapshot.child("status").exists()) {
wasActive = dataSnapshot.child("status").getValue(Boolean.class);
}
boolean isActive = dataSnapshot.child("status").getValue(Boolean.class);

if (isActive <> wasActive) {
... the user's status changed
}

previousSnapshot = dataSnapshot;
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
throw databaseError.toException(); // never ignore errors
}
});

关于java - 使用 firebase ValueEventListener 检测值变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61144646/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com