android - 使用 kotlin 在特定时期更新 firebase 实时数据库
问题描述
我正在使用 Firebase 实时数据库编写 Kotlin Android 应用程序,我想在特定时间段(10 秒)内更新 GPS 数据,而不是实时更新。Timer()
和都试过了Handler()
,但更新时间不准确,有时不到 10 秒。
我读了这个,但它没有帮助。
val myTimer = Timer()
val task = object : TimerTask() {
override fun run() {
val database = FirebaseDatabase.getInstance()
val gps = GPS(latFirebase, longFirebase)
val mAuth = FirebaseAuth.getInstance()
val currentUser = mAuth!!.currentUser
val userID = currentUser!!.uid
val ref = database.getReference("gps_data/$userID")
ref.setValue(gps)
}
}
myTimer.schedule(task, 100, 10000)
解决方案
不幸的是,Firebase 实时数据库中没有内置每 10 秒自动增量的操作。如果您需要该功能,则必须从客户端应用程序执行此操作,使用如下处理程序:
val handler = Handler()
val timer = Timer()
val doAsynchronousTask = object : TimerTask() {
override fun run() {
handler.post {
try {
//Your function call
} catch (e: Exception) {
// TODO Auto-generated catch block
}
}
}
}
timer.schedule(doAsynchronousTask, 0, 10000)
或者从Cloud Functions等服务器端环境执行此操作。由于 Cloud Functions 仅响应触发器运行并且还没有内置触发器,因此您可以使用 cron-job.org 之类的服务来模拟它。为此,请参阅此帖子中 Frank van Puffelen 的回答。
推荐阅读
- c# - 在后面的代码中从网络驱动器设置 Asp.Net ImageUrl
- javascript - 用 javascript 创建的基本计算器.. 使用警报告诉用户任何错误。可能的错误包括:
- javascript - 访问数组元素任务
- javascript - 带有数组列表的每个问题的布尔值
- amazon-web-services - AWS S3 存储桶版本控制在存储桶级别或目录级别而不是对象级别
- regex - 正则表达式截断 nginx 上的字符串
- html - 如何“清除”弹性框项目?
- ibm-doors - 如何访问隐藏的 DXL 变量/函数?
- julia - 在 Julia 中找不到 LinAlg 包
- r - Negative length vectors are not allowed in distance function