我在Firebase Realtime数据库中添加了数据,并使用以下代码设置了addChildEventListener
。
private DatabaseReference mFirebaseDatabaseRef;
mFirebaseDatabaseRef = FirebaseDatabase.getInstance().getReference("user").child("details");
for (int i = 0; i < result.size(); i++) {
String id = mFirebaseDatabaseRef.push().getKey();
String name = result.get(i).getName();
Details details = new Details();
appDetails.setName(name);
appDetails.setLabel(result.get(i).getLabel());
appDetails.setIconbase64(result.get(i).getIconbase64());
mFirebaseDatabaseRef.child(id).setValue(details );
}
addEventListener();
添加Child事件侦听器方法。
private void addEventListener() {
mFirebaseDatabaseRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
Log.d("Realtime", "s");
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
Log.d("Realtime", "s");
Toast.makeText(mContext, "Child Changed", Toast.LENGTH_LONG).show();
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
Log.d("Realtime", "s");
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
Log.d("Realtime", "s");
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d("Realtime", "s");
}
});
}
现在,当我更改数据库中的数据时,onChildChanged
中的addChildEventListener
仅被第一次调用。但是当我再次更改Datbase中的数据时,没有触发任何onChildChanged
。
我每次在更新数据时都想触发onChildChanged Datbase。
答案 0 :(得分:0)
您需要使用onChildAdded()方法而不是onChildChanged()方法来调用数据
private void addEventListener() {
mFirebaseDatabaseRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
Log.d("Realtime", "s");
Toast.makeText(mContext, "Child Changed", Toast.LENGTH_LONG).show();
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
Log.d("Realtime", "s");
Toast.makeText(mContext, "Child Changed", Toast.LENGTH_LONG).show();
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
Log.d("Realtime", "s");
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
Log.d("Realtime", "s");
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d("Realtime", "s");
}
});
}
答案 1 :(得分:0)
我找到了解决方案,
出于某些主要原因,我重新启动了应用程序。
所以我再次在onCreate方法中添加addChildEventListener
,所有内容都按预期运行。