【发布时间】:2020-05-19 20:09:21
【问题描述】:
我需要在 Kotlin Android 应用程序中获取 Firebase 数据库当前毫秒纪元时间,我尝试将值推送到 firebase 然后读取它,我有一个按钮调用名为 pushEndTime() 的函数然后调用 read() 但它总是第一次单击时获取空值,然后在第二次单击时获取结束时间的过去值
这是代码:
private fun pushEndTime(){
rootRef.child("user/endTime").setValue(ServerValue.TIMESTAMP)
}
然后我阅读它使用
private fun read(){
rootRef.child("user/endTime").addValueEventListener(
object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
endTime = dataSnapshot.value.toString()
}
override fun onCancelled(databaseError: DatabaseError) {
Log.w(TAG, "LoginData:onCancelled", databaseError.toException())
Toast.makeText(this@HomeFragment.context, "Error! check your internet", Toast.LENGTH_LONG)
.show()
}
})
}
我在onActivityCreated 中使用这些方法,如下所示:
button.setOnClickListener {
pushEndTime()
read()
}
我不能把pushEndTime() 放在onActivityCreated 中,它必须在一个函数中,一旦单击按钮并检查其他一些值,它就会创建 endTime,但我也尝试将它放在里面创建并仍然返回 null第一个按钮点击的结果
我在这里找到了一些建议使用Firebase.database.ServerValue.TIMESTAMP 的答案,但它对我不起作用
这就是我使用它的方式:endTime = ServerValue.TIMESTAMP.getValue(".sv")
但它返回这个值而不是纪元时间:Timestamp
我试过这个:Firebase.database.ServerValue.TIMESTAMP.getValue(".sv") 但它显示unresolved reference: ServerValue 错误
我也试过这样:Firebase.database.reference.ServerValue.TIMESTAMP.getValue(".sv") 和同样的未解决的参考错误
com.google.firebase.database.ServerValue 已导入
我需要获取firebase服务器时间,如果绝对没有办法,如何在kotlin中获取互联网时间?
【问题讨论】:
-
您的代码是正确的。你怎么称呼这些方法。可以分享一下吗?
-
我认为主要问题是,当您单击按钮从 Firebase 加载服务器时间时,响应需要时间。您应该实现异步以等待 Firebase 响应。
-
@KasımÖzdemir 我将其添加到问题中
-
@mamunmohamed 你能提供一些关于异步使用的好的参考吗?
-
我试过我的答案。它工作正常。
标签: android firebase kotlin firebase-realtime-database