如何在循环中删除ValueEventListener

时间:2018-01-31 06:29:12

标签: android

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?请帮帮我。

1 个答案:

答案 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
    }
}

感谢那些试图帮助我的人!