为了账号安全,请及时绑定邮箱和手机立即绑定

Firebase:如何在排队写操作期间管理UI更改?

Firebase:如何在排队写操作期间管理UI更改?

郎朗坤 2021-04-07 15:15:43
我在启用了磁盘持久性的Android应用中使用Firebase实时数据库。当用户首次打开应用程序时,我读取身份验证状态,如果该值为null,则显示登录屏幕,登录后,我将username根据该用户ID将其存储在实时数据库中。如果用户名为空,那么我将显示username设置屏幕,他将在其中选择唯一的用户名username。在用户名设置阶段连接断开时会出现问题。username尚未写入数据库,但是当他下次打开应用程序时,username它将不会为null,因为实时数据库为我提供了存储在缓存中的值。因此,我进入主屏幕,但是如果在此阶段其他人选择了相同的用户名怎么办?我维护之间的双向映射uid,并username在此建议的答复我不能使用事务,因为一次只能在一条路径上运行事务,但就我而言,我必须自动更新两条路径。我还设置了安全规则来维护唯一的用户名,但是该如何处理已经越过用户名设置屏幕的用户。
查看完整描述

1 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

如果在此阶段其他人选择了相同的用户名怎么办?


每当您要对用户名执行写操作时,都需要确保其唯一性。要检查Firebase实时数据库中是否存在用户名,需要执行以下查询:


DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();

Query query = rootRef.child("users").orderByChild("userName").equalTo(userName);

query.addValueEventListener(/* ... */);

因此,如果用户在脱机时尝试设置/更改用户名,则上述查询将添加到队列中。一旦用户重新建立连接,脱机时所做的每个更改都将在Firebase服务器上更新。换句话说,以上查询将在服务器上提交。因此,如果用户选择了脱机时数据库中已经存在的用户名,那么当其重新联机时,他将收到一条消息,提示用户名已经存在。


我不能使用事务,因为一次只能在一条路径上运行事务,但就我而言,我必须自动更新两条路径。


我不能使用事务,因为它只能在一条路径上运行,您根本不能使用事务。不支持离线使用交易。这是因为事务绝对需要与服务器进行往返通信,以确保事务内的代码成功完成。因此,交易只能在您在线时执行。


查看完整回答
反对 回复 2021-04-14
  • 1 回答
  • 0 关注
  • 134 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信