【发布时间】:2018-08-30 14:57:33
【问题描述】:
我使用setValue() 来更新我的 Firebase 数据库中的值,只要它的状态发生变化。但是不断更新该值会触发不需要的eventListeners。
有没有什么方法可以在不触发其他不打算触发的事件监听器的情况下更新 Firebase 数据库上的值?
这是设置值的代码:
stamp = isOnline();
final DatabaseReference rRef = FirebaseDatabase.getInstance().getReference();
final DatabaseReference uref = rRef.child("users");
final DatabaseReference sRef = uref.child(mAuth.getUid());
sRef.child("online_status").setValue(stamp);
被触发的监听器(我不想):
uRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
ms = dataSnapshot.child("rec_msg").getValue(String.class);
fUid = dataSnapshot.child("fromUID").getValue(String.class);
st = dataSnapshot.child("rec_secret").getValue(String.class);
boolean tell = dataSnapshot.child("online_status").getValue(Boolean.class);
if(tell)
setTitle(hName + " (online)");
int km = 0;
try {
km = Integer.parseInt(st);
}
catch (NumberFormatException e) {
Log.d("NumberError:", "Can't convert");
}
if(ms!=null && !ms.equals(""))
addMessageBox(ms,km);
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
ms = dataSnapshot.child("rec_msg").getValue(String.class);
fUid = dataSnapshot.child("fromUID").getValue(String.class);
st = dataSnapshot.child("rec_secret").getValue(String.class);
boolean tell = dataSnapshot.child("online_status").getValue(Boolean.class);
if(tell)
setTitle(hName + " (online)");
int km = 0;
try {
km = Integer.parseInt(st);
}
catch (NumberFormatException e) {
Log.d("NumberError:", "Can't convert");
}
if(ms!=null && !ms.equals(""))
addMessageBox(ms,km);
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
Toast.makeText(Main5Activity.this,"User left the conversation", Toast.LENGTH_SHORT).show();
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
【问题讨论】:
-
请提供一个最小的工作示例并向我们展示您到目前为止所做的尝试。
标签: java android firebase firebase-realtime-database event-listener