Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.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 Firebase Firestore:没有internet连接时是否有回调?_Android_Firebase_Kotlin_Google Cloud Firestore - Fatal编程技术网

Android Firebase Firestore:没有internet连接时是否有回调?

Android Firebase Firestore:没有internet连接时是否有回调?,android,firebase,kotlin,google-cloud-firestore,Android,Firebase,Kotlin,Google Cloud Firestore,我正在开发一个Android应用程序,使用CloudFireStore存储数据。以下是我将数据设置到数据库的方式: private fun setData() { val task = UploadDataTask() task.setOnUploadFinishedListener(object: UploadDataTask.OnUploadFinishedListener{ override fun uploadFinished() {

我正在开发一个Android应用程序,使用CloudFireStore存储数据。以下是我将数据设置到数据库的方式:

private fun setData() {
    val task = UploadDataTask()
    task.setOnUploadFinishedListener(object: UploadDataTask.OnUploadFinishedListener{
        override fun uploadFinished() {
            // Do something
        }

        override fun uploadFailed() {
            // Do something
        }
    })
}

private class UploadDataTask: AsyncTask<Void, Void, Void>() {

    private var onUploadFinishedListener: OnUploadFinishedListener? = null
    fun setOnUploadFinishedListener(listener: OnUploadFinishedListener) {
        onUploadFinishedListener = listener
    }

    override fun doInBackground(vararg params: Void?): Void? {
        val map = hashMapOf(
            UID to firebaseUser.uid
        )
        firebaseFirestore.collection(USERS)
            .document(firebaseUser.uid)
            .set(map)
            .addOnSuccessListener {
                if(onUploadFinishedListener != null)
                    onUploadFinishedListener!!.uploadFinished()
            }
            .addOnFailureListener {
                if(onUploadFinishedListener != null)
                    onUploadFinishedListener!!.uploadFailed()
            }
        return null
    }

    interface OnUploadFinishedListener {
        fun uploadFinished()
        fun uploadFailed()
    }
}
private fun setData(){
val task=UploadDataTask()
setOnUploadFinishedListener(对象:UploadDataTask.OnUploadFinishedListener{
覆盖乐趣上载完成(){
//做点什么
}
覆盖乐趣上载失败(){
//做点什么
}
})
}
私有类UploadDataTask:AsyncTask(){
私有变量onUploadFinishedListener:onUploadFinishedListener?=null
趣味设置OnUploadFinishedListener(侦听器:OnUploadFinishedListener){
onUploadFinishedListener=侦听器
}
覆盖有趣的背景(vararg参数:Void?):Void{
val map=hashMapOf(
UID到firebaseUser.UID
)
firebaseFirestore.collection(用户)
.document(firebaseUser.uid)
.set(地图)
.addOnSuccessListener{
if(onUploadFinishedListener!=null)
onUploadFinishedListener!!.uploadFinished()
}
.addOnFailureListener{
if(onUploadFinishedListener!=null)
onUploadFinishedListener!!.uploadFailed()
}
返回空
}
接口OnUploadFinishedListener{
乐趣上传完成()
趣味上传失败()
}
}

这很有效,但有一个例外。如果我想将数据加载到Firestore,但没有连接到internet,则不会调用
onSuccessListener
或onFailureListener。我知道这是因为只有当数据写入Firestore时才会调用它们。但我不知道有没有其他方法来检查是否有连接。例如,当我希望在数据成功写入Firestore之前显示一个进度对话框时,如果没有连接,它不会关闭。那我怎么检查呢?

第一件事。云Firestore客户端已经在后台线程中运行所有网络操作。这意味着所有操作都不会阻塞主线程。将其放入
AsyncTask
中不会带来任何额外的好处

例如,当我希望在数据成功写入Firestore之前显示一个进度对话框时,如果没有连接,它不会关闭

只要在调用
setData()
方法并在
onSuccess()中将其关闭后,显示
ProgressDialog
。由于只有在Firebase服务器上成功写入数据时才调用此方法,因此在Firebase服务器上使用此方法是正确的

此外,如果您希望在读取数据时具有相同的行为,则应使用
isFromCache()
方法,如我在以下帖子中的回答所述:


好的,但是当我没有internet连接时,对话框仍然不会被取消,因为不会调用
onSuccess()
。是的,这是正确的。当触发
onSuccess()
时,一旦您重新连接internet,
ProgressDialog
将被取消。这不是你想要的吗?不,我希望当我有internet连接并且调用
onSuccess()
onFailure()
时,它被解除,但是如果没有internet连接,我还希望它被解除,然后显示一条消息或其他内容,通知用户上载数据无效。如果您希望在连接到internet时解除连接,则应在
onSuccess()
onFailure()中调用
disclose()
。但是如果您在没有internet连接的情况下关闭
ProgressDialog
,那么当您重新连接时就没有什么可关闭的了,对吗?因为
ProgressDialog
已被解除。如果您想知道某个设备是否已连接到internet,请参阅。现在好了吗?好的,谢谢。我只是想知道如何检测是否有互联网连接。