Что заставляет другую позицию запроса разрешения в коде изменять поведение приложения Android

#android #firebase #kotlin #google-cloud-firestore

# #Android #firebase #kotlin #google-облако-firestore

Вопрос:

Я разрабатываю приложение для Android, которое загружает данные из Firestore с использованием разных object классов и требует разрешения доступа к позиции пользователя. У меня есть функция в object FirestoreDowloader классе, которая может быть загружена из Firestore:

 fun getCollection(
        collectionPath: Collections,
        checkSignature: Boolean = true,
        onCompletion: (ArrayList<Map<String, Any>>, ReadingError?) -> (Unit)
    ) {

        val result = ArrayList<Map<String, Any>>()
        if (DeviceManager.isConnected()) {

            val collectionReference = db.collection("/"   collectionPath.value)
            val query = if (checkSignature)
                collectionReference.whereEqualTo(signatureField, signature)
            else
                collectionReference

            query.get()
                .addOnSuccessListener { querySnapshot ->

                    //do stuff
                    onCompletion(result, null)
                }
                .addOnFailureListener {
                    onCompletion(
                        ArrayList(),
                        ReadingError.NOT_AUTHENTICATED
                    )
                }
        } else
            onCompletion(ArrayList(), ReadingError.DISCONNECTED)
    }  
 

это вызывается тремя разными object классами.
Один из них загружает список элементов, которые будут отображаться в RecyclerView
Перед добавлением запроса разрешения позиции приложение работало довольно хорошо, но теперь я сталкиваюсь с другими проблемами:

  1. onCompletion lamdba, по-видимому, не вызывается, поэтому приложение не может сохранить загруженное
  2. если я не предоставлю разрешение на размещение, приложение не покажет список загруженных файлов в RecyclerView
  3. Если я предоставляю разрешение на позицию, приложение отображает список загруженных, но если я перейду в настройки, чтобы отозвать разрешение на своем телефоне, не закрывая приложение, а затем снова открою его, я увижу пустое RecyclerView .

Пока я нашел временное решение: если я размещаю разрешение запроса в конце всех загрузок, приложение работает нормально, но я не могу быть окончательным решением, потому что приложение должно работать независимо от позиции разрешения запроса.

Может ли это быть вызвано некоторыми конфликтами потоков?