From 606c6b0b9e737ac598c2f717348aa101519304fc Mon Sep 17 00:00:00 2001 From: Dariusz Olszewski Date: Sat, 22 Jan 2022 20:42:04 +0100 Subject: [PATCH] Avoid NullPointerException when server response arrives after the view was unbound. Signed-off-by: Dariusz Olszewski --- .../talk/controllers/ConversationsListController.java | 8 ++++++++ .../talk/controllers/base/ButterKnifeController.kt | 4 ++++ 2 files changed, 12 insertions(+) diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java b/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java index 86620a119..59f3b7199 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java @@ -525,6 +525,14 @@ public class ConversationsListController extends BaseController implements Searc .subscribe(roomsOverall -> { Log.d(TAG, "fetchData - getRooms - got response: " + startNanoTime); + // This is invoked asynchronously, when server returns a response the view might have been + // unbound in the meantime. Check if the view is still there. + // FIXME - does it make sense to update internal data structures even when view has been unbound? + if (!viewIsBound()) { + Log.d(TAG, "fetchData - getRooms - view is not bound: " + startNanoTime); + return; + } + if (adapterWasNull) { adapterWasNull = false; loadingContent.setVisibility(View.GONE); diff --git a/app/src/main/java/com/nextcloud/talk/controllers/base/ButterKnifeController.kt b/app/src/main/java/com/nextcloud/talk/controllers/base/ButterKnifeController.kt index 1226965ac..62e25cb4b 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/base/ButterKnifeController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/base/ButterKnifeController.kt @@ -55,4 +55,8 @@ abstract class ButterKnifeController : Controller { unbinder!!.unbind() unbinder = null } + + protected fun viewIsBound() : Boolean { + return unbinder != null + } }