在安卓系统上将对象保存到Firebase时,"因路径而中止事务"。

问题描述 投票:6回答:1

我有一些代码的问题,这些代码在今天之前都是正常工作的。基本上,我在做标准的创建用户对象后,auth的额外数据。

但是,当我刚刚测试下面的代码时,它不再进入onComplete方法。相反,我在下面的日志中得到了关于事务被中止的错误。

在Google上查不到任何信息,会是什么原因呢?

编码:代码:"onComplete","onComplete","onComplete","onComplete","onComplete","onComplete","onComplete","onComplete","onComplete","onComplete","onComplete","onComplete","onComplete","onComplete","onComplete","onComplete","onComplete","onComplete","onComplete","onComplete","onComplete","onComplete","onComplete","onComplete","onComplete","onComplete"。

final Firebase userLocation = new Firebase(Constants.USERS_URL).child(uid);

    User newUser = new User(name, email);

    userLocation.setValue(newUser, new Firebase.CompletionListener() {
        @Override
        public void onComplete(FirebaseError firebaseError, Firebase firebase) {
            if(firebaseError == null) {
                ...
            }
            else {
                ...
            }
        }
    });

日志。

04-05 16:13:04.274 4855-4912/com.nicedistractions.bestbefore D/AuthenticationManager: Sending request to https://auth.firebase.com/v2/best-before/users with 2 query params
04-05 16:13:05.437 4855-4855/com.nicedistractions.bestbefore I/RegisterPresenter: Successfully created user account with uid: 4a97cb4b-4034-4f46-98c3-4104d1d649b7
04-05 16:13:05.437 4855-4855/com.nicedistractions.bestbefore D/RegisterPresenter: Creating user object
04-05 16:13:05.484 4855-4912/com.nicedistractions.bestbefore D/WebSocket: ws_1 - Reset keepAlive. Remaining: 0
04-05 16:13:05.502 4855-4912/com.nicedistractions.bestbefore D/RepoOperation: set: /users/4a97cb4b-4034-4f46-98c3-4104d1d649b7
04-05 16:13:05.503 4855-4912/com.nicedistractions.bestbefore D/DataOperation: set: /users/4a97cb4b-4034-4f46-98c3-4104d1d649b7 {
                                                                                [email protected]
                                                                                name=xxxxx xxxxxxxx
                                                                                timestampJoined={
                                                                                  timestamp={.sv=timestamp}
                                                                                }
                                                                              }
04-05 16:13:05.503 4855-4912/com.nicedistractions.bestbefore D/Persistence: Starting transaction.
04-05 16:13:05.524 4855-4912/com.nicedistractions.bestbefore D/Persistence: Persisted user overwrite in 20ms
04-05 16:13:05.536 4855-4912/com.nicedistractions.bestbefore D/Persistence: Transaction completed. Elapsed: 33ms
04-05 16:13:05.538 4855-4912/com.nicedistractions.bestbefore D/RepoOperation: Aborting transactions for path: /users/4a97cb4b-4034-4f46-98c3-4104d1d649b7. Affected: /users/4a97cb4b-4034-4f46-98c3-4104d1d649b7

谢谢你的帮助!

android transactions firebase runtime-error
1个回答
1
投票

当我连接到wifi,禁用实际的互联网连接,然后重新启用互联网连接(所有的设备仍然连接到wifi网络)时,我能够在Lollipop上重现这一点。在这之后,如果我尝试进行setValue()写入,大约18分钟后,Firebase会重新连接,setValue()也会完成。我联系了Firebase团队,他们告诉我这是预期的行为,因为Android操作系统基本上忽略了在恢复连接时通知应用程序。

根据我的经验,唯一的解决方法是禁用并重新启用WiFi,或者重启应用(重启活动无济于事)。

Firebase的支持人员给我回复了,建议打电话给 goOffline() 其次 goOnline() - 我验证了这一点,立即重新连接Firebase数据库。我现在要做的是为setValue()设置一个具有自己超时的处理程序,因为我似乎不能依赖用onComplete()抛出的DatabaseError。

© www.soinside.com 2019 - 2024. All rights reserved.