gpt4 book ai didi

android - 火力地堡 Firestore : Is there a callback when there is no internet connection?

转载 作者:行者123 更新时间:2023-11-29 22:42:49 26 4
gpt4 key购买 nike

我正在开发一款使用 Cloud Firestore 存储数据的 Android 应用。这是我将数据设置到数据库的方式:

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()
}
}

这很好用,但有一个异常(exception)。当我想将数据加载到 Firestore,但没有连接到互联网时,onSuccessListener 和 onFailureListener 都不会被调用。我知道这是因为它们只有在数据写入 Firestore 时才会被调用。但我不知道有任何其他方法可以检查是否存在连接。例如,当我想在数据成功写入 Firestore 之前显示一个进度对话框时,如果没有连接,它不会关闭。那么我该如何检查呢?

最佳答案

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

For example, when I want to show a progress dialog until the data is successfully written to the Firestore, it would not dismiss if there was no connection.

只需在调用 setData() 方法后显示 ProgressDialog 并在 onSuccess() 中关闭它即可。由于仅当数据成功写入 Firebase 服务器时才会调用此方法,因此这是使用它的正确位置。

此外,如果你想在读取数据时有相同的行为,那么你应该使用 isFromCache() 方法,就像我在以下帖子的回答中解释的那样:

关于android - 火力地堡 Firestore : Is there a callback when there is no internet connection?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58816256/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com