是什么使得代码中不同的权限请求位置改变了android应用程序的行为
我正在开发一个Android应用程序,它使用不同的是什么使得代码中不同的权限请求位置改变了android应用程序的行为,android,firebase,kotlin,google-cloud-firestore,Android,Firebase,Kotlin,Google Cloud Firestore,我正在开发一个Android应用程序,它使用不同的对象类从Firestore下载数据,并且需要用户位置访问权限。 我在object FirestoreDowloader类中有一个函数,负责从Firestore下载: fun getCollection( collectionPath: Collections, checkSignature: Boolean = true, onCompletion: (ArrayList<Map<Str
对象类从Firestore下载数据,并且需要用户位置访问权限。
我在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)
}
fun getCollection(
collectionPath:集合,
checkSignature:Boolean=true,
onCompletion:(数组列表,读取错误?->(单位)
) {
val result=ArrayList()
如果(DeviceManager.isConnected()){
val collectionReference=db.collection(“/”+collectionPath.value)
val query=if(检查签名)
收款参考。whereEqualTo(签名字段,签名)
其他的
收藏参考
query.get()
.addOnSuccessListener{querySnapshot->
//做事
onCompletion(结果,空)
}
.addOnFailureListener{
未完成(
ArrayList(),
ReadingError.NOT\u身份验证
)
}
}否则
onCompletion(ArrayList(),ReadingError.DISCONNECTED)
}
由三个不同的对象类调用。
其中一个下载要在RecyclerView
在添加职位权限请求之前,该应用程序运行良好,但现在我面临不同的问题:
显然没有调用onCompletion
lamdba,因此应用程序无法存储下载的内容
如果我没有授予职位权限,应用程序将不会在RecyclerView
如果我授予职位权限,应用程序将显示下载列表,但如果我在不关闭应用程序的情况下进入设置以撤销手机中的权限,然后重新打开,我会看到一个空的RecyclerView
到目前为止,我找到了一个临时解决方案:若我将请求权限放在所有下载的末尾,那个么该应用程序运行良好,但我认为这不是最终的解决方案,因为该应用程序应该在不考虑请求权限位置的情况下运行
这可能是由一些线程冲突引起的吗