我有一个Firebase数据库,用于在我的Android应用中保存用户特定数据。要检索数据,我使用ChildEventListener在启动时获取数据。
userRef = new Firebase("https://XXX.firebaseio.com/users_data/" + authData.getUid());
// Attach an listener to read the data at our posts reference
userEventListener = new UserChildEventListener();
userRef.addChildEventListener( userEventListener );
大部分时间一切正常。调用onChildAdded函数并在本地添加数据。但是有些情况下没有调用它。我检查了身份验证是否正常(其他节点中的其他数据正在加载)。我将Firebase的日志级别更改为DEBUG,当它工作时,它对于每个子节点都是这样的:
D / EventRaiser(24587):提升/ users_data / google:XXX:CHILD_ADDED:{bel_activce:active} D / FirebaseDataHelper(24587):onChildAdded:bel_active
当它不起作用时它只是(没有onChildAdded调用):
D / EventRaiser(25553):提升/ users_data / google:XXX:CHILD_ADDED:{bel_active:active}
这个Raising日志究竟是什么意思?好像数据正在更新,但由于某种原因,回调没有被调用?
感谢您的帮助。
更新
基于@FrankvanPuffelen反馈,我检查了onCancelled()函数,结果发现它在两种情况下都被调用。这是两种情况下所有CHILD_ADDED提升后发生的日志。
D / EventRaiser(24587):提升/ users_data / google:XXX:取消 D / FirebaseDataHelper(24587):onCancelled:message:details:code:-3 auth:google:XXX
onCancelled:...行记录在回调中,如下所示:
Log.d(TAG, "onCancelled: message: " +firebaseError.getDetails() + " details: " + firebaseError.getDetails() + " code: " +firebaseError.getCode() + " auth: " + authData.getUid());
以下是此节点的安全规则:
{
"rules": {
"users_data": {
".validate": "auth != null",
"$user_id": {
".write": "$user_id === auth.uid",
".read": "$user_id === auth.uid"
}
}
}
这有什么问题吗?