我希望我的应用程序允许用户在实时数据库上备份其数据并还原它。我已经实现了备份功能,但是当我尝试实现还原功能时,我卡住了。因为ChildEventListener
只能让您实时检索数据,这是一个问题,因为我需要知道备份何时完成下载。如何只能检索一次数据?
若要仅检索一次数据,需要使用以下内容:
public void addListenerForSingleValueEvent (ValueEventListener listener)
为此位置的数据中的单个更改添加侦听器。此侦听器将使用该位置的数据值触发一次。
你需要改用addListenerForSingleValueEvent(( 例如:
FirebaseDatabase.getInstance()
.getReference()
.child("Your Node")
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
// Do whatever you need with your data (retrieved only once)
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
// Handle Database Error
}
});
对于数据库引用对象,就像添加事件侦听器一样,也可以使用removeEventListener
将其删除。
而不是像这样创建匿名对象
checkBuy.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
checkPurchase(snapshot);
addListView();
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
可以在onDataChange
方法的末尾使用removeEventListener
创建ValueEventListener
的命名对象并将其从数据库引用对象中删除
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
checkPurchase(snapshot);
addListView();
checkBuy.removeEventListener(valueEventListener);
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
checkBuy.addValueEventListener(valueEventListener);
方法中的代码仅执行一次onDataChange
因为一旦执行方法的最后一行,ValueEventListener
对象就会被删除。