Android 仅从实时数据库检索一次数据
我希望我的应用程序允许用户将其数据备份到实时数据库并进行恢复。我已经实现了备份功能,但在尝试实现恢复功能时遇到了问题。因为Android 仅从实时数据库检索一次数据,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我希望我的应用程序允许用户将其数据备份到实时数据库并进行恢复。我已经实现了备份功能,但在尝试实现恢复功能时遇到了问题。因为ChildEventListener只允许您实时检索数据,这是一个问题,因为我需要知道备份何时完成下载。如何仅检索一次数据?要仅检索一次数据,需要使用以下命令: 在此位置为数据中的单个更改添加侦听器。此侦听器将使用该位置的数据值触发一次 您需要改为使用addListenerForSingleValueEvent() 例如: FirebaseDatabase.getInsta
ChildEventListener
只允许您实时检索数据,这是一个问题,因为我需要知道备份何时完成下载。如何仅检索一次数据?要仅检索一次数据,需要使用以下命令:
在此位置为数据中的单个更改添加侦听器。此侦听器将使用该位置的数据值触发一次
您需要改为使用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) {
}
});
您可以创建ValueEventListener
的命名对象,并使用removeEventListener
在onDataChange
方法末尾将其从数据库引用对象中删除
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
对象就会被删除