我有一些代码的问题,这些代码在今天之前都是正常工作的。基本上,我在做标准的创建用户对象后,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
谢谢你的帮助!
当我连接到wifi,禁用实际的互联网连接,然后重新启用互联网连接(所有的设备仍然连接到wifi网络)时,我能够在Lollipop上重现这一点。在这之后,如果我尝试进行setValue()写入,大约18分钟后,Firebase会重新连接,setValue()也会完成。我联系了Firebase团队,他们告诉我这是预期的行为,因为Android操作系统基本上忽略了在恢复连接时通知应用程序。
根据我的经验,唯一的解决方法是禁用并重新启用WiFi,或者重启应用(重启活动无济于事)。
Firebase的支持人员给我回复了,建议打电话给 goOffline()
其次 goOnline()
- 我验证了这一点,立即重新连接Firebase数据库。我现在要做的是为setValue()设置一个具有自己超时的处理程序,因为我似乎不能依赖用onComplete()抛出的DatabaseError。