仅从实时数据库检索一次数据



我希望我的应用程序允许用户在实时数据库上备份其数据并还原它。我已经实现了备份功能,但是当我尝试实现还原功能时,我卡住了。因为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对象就会被删除。

最新更新