ValueEventListener valueEventListener;//Declared Global
for (String out: temp) {
main = databaseReference.child(out).child("count");
listen(out);
}
private void listenCountInCategories(final String out) {
valueEventListener = main.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
gettingCount(dataSnapshot, out);
main.removeEventListener(valueEventListener);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
我的问题是onDataChange方法是异步的,并且每次循环后都会覆盖ValueEventListener,并且它不知道要删除哪一个!那么有没有办法在for循环中删除它?或者有没有办法删除所有匿名ValueEventListener?请帮帮我。
答案 0 :(得分:0)
我想我找到了解决方案!我记得有关创建对象的信息。我创建了另一个类并为每个“for-loop”创建一个对象,这避免了ValueEventListener覆盖。
看看这个!
这是我从Activity更改循环的方式。
for (String out: temp) {
ValueEventListenerLoopMode vellm = new ValueEventListenerLoopMode(this);
vellm.listenFromForLoop(out, databaseReference.child(out).child("count"));
}
这是ValueEventListenerLoopMode类
public class ValueEventListenerLoopMode {
private Context context; //I just wanted to use SharedPreference and so I need to call my current Activity!
private ValueEventListener valueEventListener;
public ValueEventListenerLoopMode(Context context) {
this.context=context;
}
public void listenFromForLoop(final String name, final DatabaseReference dbr) {
valueEventListener = dbr.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
gettingCount(dataSnapshot, name);
dbr.removeEventListener(valueEventListener);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
private void gettingCount(DataSnapshot dataSnapshot, String name) {
//My Stuff
}
}
感谢那些试图帮助我的人!