我在android中使用firebase。 我想在firebase中读取一次数据。
我读了question,它说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) {
}
});
答案 0 :(得分:0)
它的原因不是firebase,碎片。
我在viewPager的片段中使用了addListenerForSingleValueEvent。 当viewPager的片段被调用时,viewPager会破坏片段并再次创建片段。
为了防止碎片破坏,您需要覆盖它。
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
Log.d(TAG, "don't destroy!");
}
答案 1 :(得分:0)
对于数据库引用对象,与添加事件侦听器的方式相同,也可以使用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
对象在该方法的最后一行执行后立即被删除。