我正在使用Firebase实时数据库编写Kotlin Android应用,我想在特定时间段(10秒)而不是实时更新GPS数据。我同时尝试了Timer()
和Handler()
,但是更新时间不准确,有时少于10秒。
我读了this,但没有帮助。
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)
答案 0 :(得分:1)
不幸的是,Firebase实时数据库中没有内置每十秒钟一次的自动增量操作。如果您需要该功能,则必须使用这样的处理程序在客户端应用程序中执行以下操作:
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之类的服务进行模拟。为此,请参见post的Frank van Puffelen的回答。