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

我在启用了磁盘持久性的Android应用中使用Firebase实时数据库。

当用户首次打开应用程序时,我读取身份验证状态,如果该值为null,则显示登录屏幕,登录后,我将username根据该用户ID将其存储在实时数据库中。

如果用户名为空,那么我将显示username设置屏幕,他将在其中选择唯一的用户名username。在用户名设置阶段连接断开时会出现问题。username尚未写入数据库,但是当他下次打开应用程序时,username它将不会为null,因为实时数据库为我提供了存储在缓存中的值。因此,我进入主屏幕,但是如果在此阶段其他人选择了相同的用户名怎么办?

我维护之间的双向映射uid,并username在此建议的答复

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

我还设置了安全规则来维护唯一的用户名,但是该如何处理已经越过用户名设置屏幕的用户。


郎朗坤
浏览 135回答 1
1回答

BIG阳

如果在此阶段其他人选择了相同的用户名怎么办?每当您要对用户名执行写操作时,都需要确保其唯一性。要检查Firebase实时数据库中是否存在用户名,需要执行以下查询:DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();Query query = rootRef.child("users").orderByChild("userName").equalTo(userName);query.addValueEventListener(/* ... */);因此,如果用户在脱机时尝试设置/更改用户名,则上述查询将添加到队列中。一旦用户重新建立连接,脱机时所做的每个更改都将在Firebase服务器上更新。换句话说,以上查询将在服务器上提交。因此,如果用户选择了脱机时数据库中已经存在的用户名,那么当其重新联机时,他将收到一条消息,提示用户名已经存在。我不能使用事务,因为一次只能在一条路径上运行事务,但就我而言,我必须自动更新两条路径。我不能使用事务,因为它只能在一条路径上运行,您根本不能使用事务。不支持离线使用交易。这是因为事务绝对需要与服务器进行往返通信,以确保事务内的代码成功完成。因此,交易只能在您在线时执行。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java