【发布时间】:2017-06-20 15:04:25
【问题描述】:
我在 Firebase 上使用持久性、orderByChild() 和 limitToLast 方法遇到了一个奇怪的行为。
这是我的基本代码。请注意,我的应用程序始终在线。 (您将在下面找到重现问题的所有步骤以及示例项目的 github 链接)
在我的应用程序类中启用持久性:
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
给用户加分:
FirebaseDatabase.getInstance().getReference("scores")
.child("users")
.child("user1") //add a new user
.child("score") //along with a new score
.setValue(1);
获得最好的 3 分:
FirebaseDatabase.getInstance().getReference("scores")
.child("users")
.orderByChild("score")
.limitToLast(3)
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
这是重现问题的工作流程:
- 清除您的 Firebase 数据库
- 显示所有 DB 以确认一切为空
- 显示最好的 3 个分数以确认一切都是空的
- 添加新分数:(user1, 1)
- 显示最好的 3 个分数。结果 = (user1, 1) => 好的
- 添加新分数:(user2, 2)
- 显示最好的 3 个分数。结果 = (user1, 1), (user2, 2) => OK
删除应用
再次安装应用
- 显示最好的 3 个分数。结果 = (user1, 1), (user2, 2) => OK
- 添加 2 个新分数:(user3, 3) 和 (user4, 4)
- 显示最好的 3 个分数。结果 = (user1, 1), (user2, 2) => NOK
- 显示所有 DB => (user1, 1), (user2, 2), (user3, 3), (user4, 4) => OK
所以在这个特定用例中,主要问题是使用 orderByChild 和 limitToLast 方法的“获得最佳 3 分”请求在添加一些新分数后不会更新。 (但它在第 7 步有效!)
我已经在我的 github 上上传了 Android 项目:https://github.com/MalikDE/FirebaseOrderByChildIssue
【问题讨论】:
标签: android firebase firebase-realtime-database persistence