如果用户的互联网关闭,如何更改数据库值

2023-12-20

在过去的几天里,我一直在尝试显示用户的在线/离线状态。为此,我有一个注册活动,他们在其中注册,他们的信息会保存在 firebase 中,如果他们退出活动,我会覆盖其 onstop方法并将值设置为离线...但是如果用户突然失去互联网连接,它仍然显示在线..我无法将其更改为离线,因为需要互联网来在数据库中进行更改,并且使用没有互联网...那么我如何将数据库值设置为离线...我用谷歌搜索了很多关于此的内容,但没有找到任何内容...任何人都可以帮我吗

My code

    @Override
protected void onStart() {
    super.onStart();
    fetchData();
//        mDatabaseReference.child("UserData").child(UID).child("Online").setValue("True");
}
@Override
protected void onStop() {
    super.onStop();
    fetchData();
//        mDatabaseReference.child("UserData").child(UID).child("Online").setValue(false);
}

您正在尝试做的事情被称为存在系统。 Firebase 数据库有一个特殊的 API 可以实现此目的:onDisconnect()。当您将处理程序附加到onDisconnect(),当服务器检测到客户端已断开连接时,将在服务器上执行您指定的写入操作。

来自有关管理存在的文档 https://firebase.google.com/docs/database/android/offline-capabilities#section-presence:

这是一个在断开连接时写入数据的简单示例,方法是使用onDisconnect原始:

DatabaseRef presenceRef = FirebaseDatabase.getInstance().getReference("disconnectmessage");
// Write a string when this client loses connection
presenceRef.onDisconnect().setValue("I disconnected!");

对于您的情况,这可能很简单:

protected void onStart() {
    super.onStart();
    fetchData();
    DatabaseReference onlineRef = mDatabaseReference.child("UserData").child(UID).child("Online");
    onlineRef.setValue("True");
    onlineRef.onDisconnect().setValue("False");
}

请注意,这将在简单的情况下起作用,但会开始出现问题,例如当您的连接快速切换时。在这种情况下,服务器可能需要比客户端重新连接所需的时间更长的时间才能检测到客户端消失(因为这可能取决于套接字超时),从而导致无效False.

为了更好地处理这些情况,请查看文档中的示例存在系统 https://firebase.google.com/docs/database/android/offline-capabilities#section-sample,它对边缘情况有更精细的处理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果用户的互联网关闭,如何更改数据库值 的相关文章

  • 将JSON数据解析到Android ListView中

    我已经潜伏这个网站很长一段时间了 幸运的是 到目前为止我所有的问题都得到了解答 我希望你们中的一些人能够阐明我的问题 我可以成功地让 ListView 来显示字符串数组 但是当我尝试将 JSON 数据解析为数组时 我的程序只是强制关闭 而
  • 使用busybox在后台安装apk

    我可以在 root 设备上使用 busybox 在后台安装 apk 吗 我看到类似的东西 但它不起作用 process install CommandCapture command new CommandCapture 0 chmod 77
  • 当前版本的Android Gradle插件不支持按需配置

    升级到 Android Studio 3 1 2 后 出现以下错误 当前版本的 Android Gradle 插件不支持按需配置 因为您使用的是 Gradle 4 6 或更高版本 建议 通过在 gradle properties 文件中设置
  • 使用Picasso从url保存图像?

    我正在尝试使用 API Picasso 保存图像 为了做到这一点 我正在尝试使用Target保存 但我无法完成这项工作 我怎么能这样做呢 Trying save image public static void imageDownload
  • 尝试获取屏幕上绘制的每个随机圆圈的 x、y 坐标

    您好 我正在制作一款游戏 该游戏将在屏幕上创建随机圆圈 随机创建的圆圈的值为红色或绿色 我的问题是 我希望不仅能够确定用户何时单击其中一个圆圈 而且还能够确定他们最终单击的圆圈 红色或绿色 下面是我的代码 我的主要问题是试图找到将要绘制的圆
  • 作为附件的 Android 设备

    我有 2 个 Android 设备 我想用 USB OTG 电缆连接它们 并在两个设备之间进行来回通信 据我了解 一台 Android 设备将充当 USB 主机 运行 4 4 的 Nexus 7 另一台 Android 设备将充当 USB
  • Android Studio 安装失败,APK 未签名

    最近从 Eclipse 更改为 Android Studio 我还更改了 JDKjava open jdk to jdk1 7 0 45 现在我尝试运行我的第一个应用程序 并收到以下消息 Installation failed since
  • 动态地将textView添加到线性布局中

    我在这里的某个地方读过这篇文章 但我完全迷失了 但我需要一些帮助 我的应用程序正在将列名称从 sqlite 拉入数组中 我想创建一个文本视图并为每个视图编辑文本 通过数组的大小 我记得在某处读过 您可以将 textViews 变量名称视为数
  • Android volley使用RequestFuture.get()时出现超时异常

    在我的片段中 我尝试使用 TMDB 的开放电影数据库来获取有关 正在播放 电影的详细信息 如果我使用 RequestFuture get time TimeUnit 方法来执行此齐射请求 我总是会收到超时错误 如果我在 Safari 中手动
  • Android:如果任务管理器终止,则重新调用应用程序

    如果应用程序线程被任务管理器杀死 则应用程序线程将关闭 需要重新调用应用程序 就像它被其他应用程序或任务管理器杀死一样 任何想法 您必须使用 START STICKY 命令运行后台服务 只需扩展 Service 并重写 onCommand
  • 如何使用共享首选项在两个 Android 应用程序之间共享数据?

    我有两个应用程序 App1 和 App2 我想使用共享首选项在 App1 中保存数据并在 App2 中访问 反之亦然 我可以在 App1 中保存数据并在 App2 中访问数据 但反之则不行 这就是我现在正在做的 在清单中 android s
  • 如何使用 MotionLayout 调整 TextView 的大小

    我正在尝试创建一个CollapsingToolbar动画使用MotionLayout 我已经成功地将所有内容设置为动画 使其表现得像CollapsingToolbar具有高度的灵活性 这意味着我可以轻松创建很棒的动画 而无需编写大量代码 我
  • 运行 Android 应用程序时出现错误

    我已经使用 Eclipse 创建了一个 Android 应用程序 但应用程序未在 AVD 上运行 它显示 不幸的是已停止工作 日志猫消息如下 07 29 04 59 50 789 W dalvikvm 784 threadid 1 thre
  • Android OptionsMenu问题,背景始终透明

    我的选项菜单总是不显示背景 背景是透明的 有谁知道如何摆脱这个 我的失败起源活动是从另一个自定义活动扩展的 我在 eclipse 上有这个项目 选项菜单工作正常 但自从我迁移到 AndroidStudio 后 选项菜单始终是透明的 我尝试更
  • LinearLayout:防止最后一个孩子被之前的大文本视图推出或挤压

    我有一个LinearLayout里面有两个孩子 第一个是TextView对于动态内容 第二个是一个按钮 我的问题是按钮被推出其父级或被挤压到不再可见的程度 我想要TextView认识到其父母与第二个孩子一起没有更多空间 并开始新的一行 而不
  • 如何为 flutter 绘图应用实现橡皮擦功能

    有一个关于通过 flutter 创建绘图应用程序的视频 YouTube https www youtube com watch v yyHhloFMNNA 它支持当用户点击屏幕时绘制线 点 但我找不到像 Android 本机那样擦除用户绘制
  • 如何关闭导航抽屉以使用返回主页图标按钮?

    我也将操作栏与搜索栏一起使用 并且我需要像后退按钮一样使用 ActionBar ico 但我也在使用导航抽屉 如何关闭 隐藏 禁用导航抽屉菜单以使用后退按钮 我的 ActionBar 代码 Override public boolean o
  • 可用屏幕的尺寸

    我使用的是 Nexus 7 1280x800 android 4 2 2 API 17 我想获取屏幕的大小 将其划分为相同高度和宽度的正方形部分 我正在使用 FrameLayout 我的方块是 ImageView 的子类 我这样做 cont
  • 在 Qt 中构建 Android 项目不再有效

    所以我对 Android SDK NDK 和 Apache Ant 进行了一些更新 现在我无法构建任何 Android 项目 我收到一条警告 然后它说找不到 build xml 文件 错误 Warning Android platform
  • 应用程序关闭时单击 Firebase 通知后打开特定活动/片段

    我知道这个问题似乎重复 但根据我的要求 我在网上搜索了很多帖子 但没有任何对我有用 我的要求 我正在使用 Firebase 来获取推送通知 当应用程序打开时意味着一切正常 但我的问题是 如果有任何推送通知出现 应用程序处于后台 关闭意味着我

随机推荐

  • 如何使用 Selenium 和 C# 识别具有 href 属性的元素

    我在选择 href 时遇到问题 a title Population and Immigration Authority href https www gov il en Departments population and immigra
  • Android:notifyDataSetChanged被调用但ListView未更新

    我得到了这个 ListView 它是从网络上的 JSON 数据填充的 但是当我更新 JSON 条目时 例如添加新条目 ListView 不会更新 即使我已经调用了notifyDataSetChanged 它也不会在列表中显示新条目 这是我的
  • 在 System.Data.SQLite 中创建/使用用户定义的函数?

    用户定义的函数和整理序列 对用户定义函数和整理序列的完全支持意味着 在许多情况下 如果 SQLite 没有某个功能 您可以用您最喜欢的 NET 语言自行编写它 编写 UDF 和整理序列从未如此简单 我在 C 上发现了这一点SQLite AD
  • 如何找到 0 - 100 之间的质数?

    想要改进这篇文章吗 提供此问题的详细答案 包括引用和解释为什么你的答案是正确的 不够详细的答案可能会被编辑或删除 在 Javascript 中 我如何找到 0 100 之间的素数 我想过 但我不知道如何找到它们 我想过做 x x 但我发现了
  • 避免同一缓存区域的多次重新填充(由于并发)

    我有一个高流量的网站 我使用休眠 我还使用 ehcache 来缓存生成页面所需的一些实体和查询 问题是 并行缓存未命中 详细的解释是 当应用程序启动并且缓存区域变冷时 每个缓存区域都会被不同的线程填充多次 而不是仅一次 因为该站点被许多用户
  • ListView.getCheckedItemPositions 无法返回 SparseBooleanArray 中的选中项

    我正在尝试读取包含多个的列表中的联系人checkboxes 但是当我打电话给sparsebooleanarray 它只是为所有列表条目返回 false 即使对于已检查的条目也是如此 我调查了这个线程为什么 ListView getCheck
  • 为多个服务器加密 web.config 数据

    我需要为客户端加密 web config 文件的部分内容 我见过的大多数参考文献都是使用 aspnet regiis 进行加密 但是 据我所知 这需要在托管该站点的 Web 服务器上进行 这意味着每个服务器的加密值都不同 我无权访问该客户端
  • 我可以将嵌入的 Base64 编码字体转换为字体文件吗?

    我有一个 font face 规则 它看起来像这样 font face font family F src url format embedded opentype url data application x font woff char
  • 为什么 Python 枚举中的可变值是同一个对象?

    在尝试不同的值类型时Enum成员们 当值可变时 我发现了一些奇怪的行为 如果我定义一个值Enum作为不同的列表 成员的行为仍然与Enum值是典型的不可变类型 例如str or int 即使我可以更改现有成员的值 以便两个值Enum成员相同
  • AngularJS For 循环与数字和范围

    Angular 确实为在 HTML 指令中使用数字的 for 循环提供了一些支持 div do something div 但是 如果您的作用域变量包含具有动态数字的范围 那么您每次都需要创建一个空数组 在控制器中 var range fo
  • Pandas GroupBy:如何根据列获取前n个值

    如果这是一个基本问题 请原谅我 但我是熊猫新手 我有一个带有 A 列的数据框 我想根据 A 列中的计数获取前 n 行 例如 原始数据看起来像 A B C x 12 ere x 34 bfhg z 6 bgn z 8 rty y 567 hm
  • 在 BigQuery 中使用 _TABLE_SUFFIX 时无法识别名称“列”

    我有以下 BigQuery 数据集 一组带有名称的表keywords ab keywords ac keywords zz 另一组带有名称的表keywords different schema ab keywords different s
  • 异常:类型“String”不是类型“Map”的子类型

    异常 类型 String 不是类型 Map 的子类型 collection data id 1 name Marko picture https lh3 googleusercontent com a AAuE7mC1vqaKk Eylt
  • 无法在 kivy 中打开窗口[重复]

    这个问题在这里已经有答案了 我开始在我的游戏中使用 kivy 因此在遵循一些在线教程时 python shell 返回这些错误 INFO Logger Record log in C Users kivy logs kivy 18 10 2
  • Powershell - 用户映射 SQL Server 2012

    我正在尝试为不同的登录帐户编写用户映射脚本 我已经编写了用户和单个服务器角色的创建脚本 但我不知道如何使用 Powershell 设置用户映射 我还需要设置Database Role membership 尤其 db backupopera
  • 为什么 Fortran 代码会出现分段错误?

    下面的 Fortran 代码出现分段错误 但是 当我修改print pow 10 8 i to print pow j i 它可以正常工作 不会出现分段错误 为什么 这很奇怪 module mdl implicit none integer
  • Xcode 变量

    在 Xcode 中 我知道你可以获得诸如PROJECT DIR在某些情况下使用 例如运行脚本构建阶段 我想知道是否可以获得构建类型 即 Release or Debug 有任何想法吗 最好的来源可能是苹果官方文档 http help app
  • Java 泛型在子类化时不兼容类型

    从泛型类类型 形式类型参数进行子类化时T E具有有效的类类型 实际类型参数 例如Type String出现多种组合 令人困惑的是该使用哪一种以及何时使用 public class SubClass
  • 动态加载库

    我有以下项目结构 Web API 类库A 类库B 类库C 这些是项目之间的参考 Web API直接引用A and B B直接引用C C有一个方法需要确保A被加载以通过反射使用其中定义的类型 我的代码实际上如下 public class C
  • 如果用户的互联网关闭,如何更改数据库值

    在过去的几天里 我一直在尝试显示用户的在线 离线状态 为此 我有一个注册活动 他们在其中注册 他们的信息会保存在 firebase 中 如果他们退出活动 我会覆盖其 onstop方法并将值设置为离线 但是如果用户突然失去互联网连接 它仍然显