- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一款使用 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/
我是一名优秀的程序员,十分优秀!