Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是什么使得代码中不同的权限请求位置改变了android应用程序的行为_Android_Firebase_Kotlin_Google Cloud Firestore - Fatal编程技术网

是什么使得代码中不同的权限请求位置改变了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

我正在开发一个Android应用程序,它使用不同的
对象
类从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
  • 到目前为止,我找到了一个临时解决方案:若我将请求权限放在所有下载的末尾,那个么该应用程序运行良好,但我认为这不是最终的解决方案,因为该应用程序应该在不考虑请求权限位置的情况下运行

    这可能是由一些线程冲突引起的吗