From 766d07d3fa0560b339c5c66e33ab36253352a1ed Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Wed, 16 Mar 2022 16:57:13 +0100 Subject: [PATCH] prevent null-pointer in case remote file listing UI gets closed before the async loading comes back Signed-off-by: Andy Scherzinger --- .../filebrowser/operations/DavListing.java | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/components/filebrowser/operations/DavListing.java b/app/src/main/java/com/nextcloud/talk/components/filebrowser/operations/DavListing.java index 38399344c..dc69a1422 100644 --- a/app/src/main/java/com/nextcloud/talk/components/filebrowser/operations/DavListing.java +++ b/app/src/main/java/com/nextcloud/talk/components/filebrowser/operations/DavListing.java @@ -2,6 +2,8 @@ * Nextcloud Talk application * * @author Mario Danic + * @author Andy Scherzinger + * Copyright (C) 2022 Andy Scherzinger * Copyright (C) 2017-2018 Mario Danic * * This program is free software: you can redistribute it and/or modify @@ -20,20 +22,26 @@ package com.nextcloud.talk.components.filebrowser.operations; -import androidx.annotation.Nullable; +import android.util.Log; + import com.nextcloud.talk.components.filebrowser.interfaces.ListingInterface; import com.nextcloud.talk.components.filebrowser.models.DavResponse; import com.nextcloud.talk.components.filebrowser.webdav.ReadFilesystemOperation; import com.nextcloud.talk.models.database.UserEntity; + +import java.util.concurrent.Callable; + +import androidx.annotation.Nullable; import io.reactivex.Single; import io.reactivex.SingleObserver; +import io.reactivex.annotations.NonNull; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; import okhttp3.OkHttpClient; -import java.util.concurrent.Callable; - public class DavListing extends ListingAbstractClass { + private static final String TAG = DavListing.class.getSimpleName(); + private DavResponse davResponse = new DavResponse(); public DavListing(ListingInterface listingInterface) { @@ -50,18 +58,22 @@ public class DavListing extends ListingAbstractClass { }).subscribeOn(Schedulers.io()) .subscribe(new SingleObserver() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { } @Override - public void onSuccess(ReadFilesystemOperation readFilesystemOperation) { + public void onSuccess(@NonNull ReadFilesystemOperation readFilesystemOperation) { davResponse = readFilesystemOperation.readRemotePath(); - listingInterface.listingResult(davResponse); + try { + listingInterface.listingResult(davResponse); + } catch (NullPointerException npe) { + Log.i(TAG, "Error loading remote folder - due to view already been terminated", npe); + } } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { listingInterface.listingResult(davResponse); } });