Firebase addListenerForSingleValueEvent在android中不读取数据一次
我在安卓系统中使用firebase。 我想在firebase中读取一次数据 我读了,它说,Firebase addListenerForSingleValueEvent在android中不读取数据一次,android,firebase,Android,Firebase,我在安卓系统中使用firebase。 我想在firebase中读取一次数据 我读了,它说,addListenerForSingleValueEvent将读取一次数据 因此,我使用了addListenerForSingleValueEvent函数,但它重复地从firebase读取数据 如何仅从firebase读取一次数据?提前谢谢 final Firebase checkBuy = new Firebase(URI); checkBuy.addLi
addListenerForSingleValueEvent
将读取一次数据
因此,我使用了addListenerForSingleValueEvent
函数,但它重复地从firebase
读取数据
如何仅从firebase
读取一次数据?提前谢谢
final Firebase checkBuy = new Firebase(URI);
checkBuy.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
checkPurchase(snapshot);
addListView();
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
其原因不是火基,而是碎片 我在viewPager的片段中使用addListenerForSingleValueEvent。 调用viewPager的片段时,viewPager将销毁片段并再次创建片段 为了防止碎片破坏,您需要覆盖此
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
Log.d(TAG, "don't destroy!");
}
其原因不是火基,而是碎片 我在viewPager的片段中使用addListenerForSingleValueEvent。 调用viewPager的片段时,viewPager将销毁片段并再次创建片段 为了防止碎片破坏,您需要覆盖此
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
Log.d(TAG, "don't destroy!");
}
对于数据库引用对象,与添加事件侦听器的方法相同,也可以使用
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
对象。对于数据库引用对象,与添加事件侦听器的方法相同,也可以使用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
对象在方法的最后一行执行后立即被删除。所以您尝试了链接问题的答案,但没有成功?给我们看看你的代码。我更新了问题。addListView和checkPurchase函数反复调用我很愚蠢,我在片段活动中声明了addListenerForSingleValueEvent。因此,每次创建片段时,addListenerForSingleValueEvent函数都会再次调用。所以您尝试了链接问题的答案,但没有成功?给我们看看你的代码。我更新了问题。addListView和checkPurchase函数反复调用我很愚蠢,我在片段活动中声明了addListenerForSingleValueEvent。因此,每次创建片段时,都会再次调用addListenerForSingleValueEvent函数。