아래와 같이 내 onPause 메서드에서 활동을 떠날 때 내 ChildEventListener observer를 제거하려고합니다. 기본적으로 내 문제는 내가 활동을 떠나서 돌아올 때 내 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가 트리거되면 배열 목록에서 요소를 제거하고 여러 번 호출 되었기 때문에 제거하려고하는 인덱스가 없기 때문에 배열 목록에서 두 개 이상의 항목을 제거합니다. –
질문에는 Arraylist가 없습니다. 실제 문제의 [mcve]를 보여주십시오 –