Android Firebase Firestore:没有internet连接时是否有回调?
我正在开发一个Android应用程序,使用CloudFireStore存储数据。以下是我将数据设置到数据库的方式: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() {
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,请参阅。现在好了吗?好的,谢谢。我只是想知道如何检测是否有互联网连接。