在特定时期内使用Kotlin更新Firebase实时数据库

时间:2018-10-11 15:59:59

标签: android firebase firebase-realtime-database kotlin

我正在使用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)

1 个答案:

答案 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的回答。