"Aborting transactions for path" 在 Android 将对象保存到 Firebase 时
"Aborting transactions for path" when saving object to Firebase on Android
我遇到了一些直到今天都运行良好的代码的问题。基本上,我在验证额外数据后执行标准的创建用户对象。
但是,当我刚刚测试下面的代码时,它不再进入 onComplete 方法。相反,我在下面的日志中收到有关交易被中止的错误。
一个Google什么也没有,会是什么?
代码:
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=xxxxxxxxxx@gmail.com
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 时,我能够在 Lollipop 上重现此内容,禁用实际的互联网连接,然后重新启用互联网连接(所有设备都保持连接到 wifi 网络)。在此之后,如果我尝试执行 setValue() 写入,大约 18 分钟后 Firebase 会重新连接并且 setValue() 完成。我联系了 Firebase 团队,被告知这是预期的行为,因为 Android OS 基本上忽略了在恢复连接时通知应用程序。
根据我的经验,唯一的解决方法是禁用并重新启用 WiFi,或者重新启动应用程序(重新启动 activity 无济于事)。
Firebase 支持人员回复我并建议先调用 goOffline()
然后再调用 goOnline()
- 我确认这会立即重新连接 Firebase 数据库。我现在所做的是为 setValue() 设置一个具有我自己的超时的处理程序,因为我似乎不能依赖于使用 onComplete() 抛出的 DatabaseError。
我遇到了一些直到今天都运行良好的代码的问题。基本上,我在验证额外数据后执行标准的创建用户对象。
但是,当我刚刚测试下面的代码时,它不再进入 onComplete 方法。相反,我在下面的日志中收到有关交易被中止的错误。
一个Google什么也没有,会是什么?
代码:
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=xxxxxxxxxx@gmail.com
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 时,我能够在 Lollipop 上重现此内容,禁用实际的互联网连接,然后重新启用互联网连接(所有设备都保持连接到 wifi 网络)。在此之后,如果我尝试执行 setValue() 写入,大约 18 分钟后 Firebase 会重新连接并且 setValue() 完成。我联系了 Firebase 团队,被告知这是预期的行为,因为 Android OS 基本上忽略了在恢复连接时通知应用程序。
根据我的经验,唯一的解决方法是禁用并重新启用 WiFi,或者重新启动应用程序(重新启动 activity 无济于事)。
Firebase 支持人员回复我并建议先调用 goOffline()
然后再调用 goOnline()
- 我确认这会立即重新连接 Firebase 数据库。我现在所做的是为 setValue() 设置一个具有我自己的超时的处理程序,因为我似乎不能依赖于使用 onComplete() 抛出的 DatabaseError。