热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Firebase数据库中的“.info/serverTimeOffset”未刷新

我正在构建一个应用程序,其中用户之间的时间安排是一项重要任务。因此,我正在使用Fireba

我正在构建一个应用程序,其中用户之间的时间安排是一项重要任务。因此,我正在使用Firebase .info / serverTimeOffset在Mainactivity“ OnCreate”中获取时间偏移并以共享的首选项进行存储,以便应用程序可以在我的所有片段中使用此变量。我将使用此偏移量值和经过的实时时间来计算实际时间。即使用户在应用程序运行时更改系统时间(作弊),实际时间也不会更改,因为我使用的是实时时间。当用户关闭应用程序,更改系统时间并立即重新打开应用程序时,问题就来了。在这种情况下,将再次调用.info / serverTimeOffset,它返回相同的偏移量(不刷新)。从Internet解决方案中,我尝试放置“ FirebaseDatabase.getInstance()。goOffline()和FirebaseDatabase.getInstance()和goOnline()”,但问题仍然存在。以下是代码


class Mainactivity : AppCompatactivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Log.i("ph","Mainactivity OnCreate")
calculateDelay(this)
}
override fun onDestroy() {
super.onDestroy()
Log.i("ph","Mainactivity OnDestroy")
}
private fun calculateDelay(ac: Context) {
FirebaseDatabase.getInstance().goOffline()
FirebaseDatabase.getInstance().goOnline()
val offsetRef = FirebaseDatabase.getInstance().getReference(".info/serverTimeOffset")
offsetRef.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onDataChange(snapshot: Datasnapshot) {
val systemTimeOffset = snapshot.getvalue(Long::class.java) ?: 0L
val estimatedOffset =
System.currentTimeMillis() + systemTimeOffset - SystemClock.elapsedRealtime()
val estimatedServerTimeMs =
estimatedOffset + SystemClock.elapsedRealtime()
Log.i("ph","Main Time " + getdate(estimatedServerTimeMs,"dd/MM/yyyy hh:mm:ss.SSS"))
val sPreference = SPreference(ac) // my preference class
sPreference.putTD(estimatedOffset) // saving to preference
}
override fun onCancelled(p0: DatabaseError) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
})
}
}

如何引用.info / serverTimeOffset?


.info/serverTimeOffset是在客户端首次建立与服务器的连接时计算的。此后不会重新计算。因此,您看到的行为按预期运行。

您必须找到另一种方法来处理应用程序运行时更改的时钟。


我刚刚进行了一次快速测试,并且(如果至少循环一次.info/serverTimeOffset / goOffline(),(至少是Javascript SDK)似乎重新计算了goOnline()值。您可能需要测试Android SDK的行为是否相同。

我的测试:https://jsbin.com/wazajid/edit?js,console


推荐阅读
  • 带添加按钮的GridView,item的删除事件
    先上图片效果;gridView无数据时显示添加按钮,有数据时,第一格显示添加按钮,后面显示数据:布局文件:addr_manage.xml<?xmlve ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 本文介绍了一款名为TimeSelector的Android日期时间选择器,采用了Material Design风格,可以在Android Studio中通过gradle添加依赖来使用,也可以在Eclipse中下载源码使用。文章详细介绍了TimeSelector的构造方法和参数说明,以及如何使用回调函数来处理选取时间后的操作。同时还提供了示例代码和可选的起始时间和结束时间设置。 ... [详细]
  • 本文详细介绍了Android中的坐标系以及与View相关的方法。首先介绍了Android坐标系和视图坐标系的概念,并通过图示进行了解释。接着提到了View的大小可以超过手机屏幕,并且只有在手机屏幕内才能看到。最后,作者表示将在后续文章中继续探讨与View相关的内容。 ... [详细]
  • 今天就跟大家聊聊有关怎么在Android应用中实现一个换肤功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根 ... [详细]
  • android 触屏处理流程,android触摸事件处理流程 ? FOOKWOOD「建议收藏」
    android触屏处理流程,android触摸事件处理流程?FOOKWOOD「建议收藏」最近在工作中,经常需要处理触摸事件,但是有时候会出现一些奇怪的bug,比如有时候会检测不到A ... [详细]
  • SmartRefreshLayout自定义头部刷新和底部加载
    1.添加依赖implementation‘com.scwang.smartrefresh:SmartRefreshLayout:1.0.3’implementation‘com.s ... [详细]
  • 详解Android  自定义UI模板设计_由浅入深
    学习安卓已有一些日子,前段时间整理了不少笔记,但是发现笔记不变分享与携带。今天开始整理博客,全当是与大家分享交流与自身学习理解的过程吧。结合最近在做的一个新闻类app及学习中的问题,一点一点整理一下, ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 标题: ... [详细]
  • Oracle10g备份导入的方法及注意事项
    本文介绍了使用Oracle10g进行备份导入的方法及相关注意事项,同时还介绍了2019年独角兽企业重金招聘Python工程师的标准。内容包括导出exp命令、删用户、创建数据库、授权等操作,以及导入imp命令的使用。详细介绍了导入时的参数设置,如full、ignore、buffer、commit、feedback等。转载来源于https://my.oschina.net/u/1767754/blog/377593。 ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
author-avatar
手机用户2502901925
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有