#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
Перед добавлением запроса разрешения позиции приложение работало довольно хорошо, но теперь я сталкиваюсь с другими проблемами:
onCompletion
lamdba, по-видимому, не вызывается, поэтому приложение не может сохранить загруженное- если я не предоставлю разрешение на размещение, приложение не покажет список загруженных файлов в
RecyclerView
- Если я предоставляю разрешение на позицию, приложение отображает список загруженных, но если я перейду в настройки, чтобы отозвать разрешение на своем телефоне, не закрывая приложение, а затем снова открою его, я увижу пустое
RecyclerView
.
Пока я нашел временное решение: если я размещаю разрешение запроса в конце всех загрузок, приложение работает нормально, но я не могу быть окончательным решением, потому что приложение должно работать независимо от позиции разрешения запроса.
Может ли это быть вызвано некоторыми конфликтами потоков?