私のonPauseメソッドに以下のようにアクティビティを残しているときに、私のChildEventListenerオブザーバを削除しようとしています。基本的に私の問題は、私がアクティビティを終了してそれに戻るときに、私のchildListenerはアクティビティを何回残してそれに戻るかによって、System.out.printlnがコンソール "onChildAdded"と "onChildRemoved"複数回、私はそれを一度呼びたいだけです。それは、最も単純なものではありませんでした場合、私は活動を去るとき、私のリスナーを終了する方法上の任意のヘルプは、事前:)android firebase stop ChildEventListener
// Connect to DB
private DatabaseReference mDataBase;
private FirebaseAuth mAuth = FirebaseAuth.getInstance();
String currentUser_UID = mAuth.getCurrentUser().getUid();
ChildEventListener childListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
mDataBase = FirebaseDatabase.getInstance().getReference();
childListener = mDataBase.child("Users").addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
String savedCardUser = (String) dataSnapshot.child("Card").getValue();
System.out.println("onChildAdded");
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
System.out.println("onChildRemoved");
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
@Override
protected void onPause() {
super.onPause();
mDataBase.removeEventListener(childListener);
}
編集
でお願いします:)(子を追加する必要がありました)パスは今完璧に動作します。リスナーを削除しました
mDataBase.child("Card").removeEventListener(childListener);
あなたの質問にこれをで行う、いわゆるされた後、リスナーを削除する問題何かを止めることではありません。これは、以前のインスタンスからの再開を防ぐことです...なぜこれが必要ですか? –
onChildRemovedがトリガされると、配列リストから要素を削除しているので、複数回呼び出されているので、配列リストから1つ以上の項目が削除されるため、削除しようとしているインデックスが存在しないためにクラッシュします:) –
質問にArraylistはありません。実際の問題の[mcve]を表示してください –