Я регистрирую прослушиватель событий внутри одного метода.
public void listenForUpdates(){
final DocumentReference docRef = db.collection("teams").document(selectedTeam);
ListenerRegistration registration = docRef.addSnapshotListener(PokerActivity.this, new EventListener<DocumentSnapshot>() {
@Override
[snip]
//registration.remove();
}
Затем другим способом мне нужно удалить два массива в своей базе данных из моей базы данных Firestore.
public void undoClicked(View view) {
db.collection("teams").document(selectedTeam).update("selectedCards", FieldValue.delete());
db.collection("teams").document(selectedTeam).update("players", FieldValue.delete());
Моя проблема:
- Когда я удаляю массивы
selectedCards
и players
, прослушиватель событий выбрасывает нулевую ссылку на объект (по крайней мере, я так думаю).
2019-05-19 16:26:32.974 14243-14243/com.example.scrumpoker E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.scrumpoker, PID: 14243
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
at com.example.scrumpoker.PokerActivity$4.onEvent(PokerActivity.java:302)
at com.example.scrumpoker.PokerActivity$4.onEvent(PokerActivity.java:290)
at com.google.firebase.firestore.DocumentReference.lambda$addSnapshotListenerInternal$2(com.google.firebase:firebase-firestore@@18.2.0:515)
at com.google.firebase.firestore.DocumentReference$$Lambda$3.onEvent(Unknown Source:6)
at com.google.firebase.firestore.util.ExecutorEventListener.lambda$onEvent$0(com.google.firebase:firebase-firestore@@18.2.0:42)
at com.google.firebase.firestore.util.ExecutorEventListener$$Lambda$1.run(Unknown Source:6)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
- Но если я включу
registration.remove();
для слушателя в моем методе listenForUpdates()
, то мое приложение не будет отслеживать изменения в базе данных.
Кажется, я застрял между камнем и наковальней!
Как я могу получить прослушиватель событий, но затем отключить его перед удалением моих массивов - без попытки поместить весь мой код в один метод?
ИЛИ - Как я могу очистить свои массивы, не удаляя их полностью из базы данных Firestore?