Firebase不会发送在我的情况下订购的数据

时间:2016-01-07 15:08:22

标签: firebase

我在firebase中订购了数据。订单对我来说至关重要。但是我的情况下firebase无法发送。 (PS:启用持久性。我在Android和IOS客户端尝试了这个。结果是一样的。)

首先,我收到了3件物品。

cache: 1,2,3      firebase:1,2,3

然后,我关闭了app并更新了数据(插入3项)。

cache: 1,2,3      firebase:1,2,3,4,5,6

我打开了app和 limitToLast(1)方法来获取最后一项。

cache: 1,2,3,6    firebase:1,2,3,4,5,6

错误即将来临......

我在 childAdded 事件中注册了此节点。 childAdded 回调触发了此序列:

1,2,3,6,4,5

我不想对物品进行分类。我该怎么办?

我完成了示例项目。 https://github.com/muzafferyilmaz/FirebaseOrderTesting

更新

来自链接的github项目的相关代码段:

private ChildEventListener mChildEventListener = new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
        String text = dataSnapshot.getValue(String.class);
        Log.i(TAG, "onChildAdded: " + text);
        mAdapter.addData(text);
    }

2 个答案:

答案 0 :(得分:2)

您的问题是由于您忽略了传递给onChildAdded的第二个参数而造成的:

void onChildAdded(DataSnapshot snapshot, String previousChildName)

previousChildName是新孩子之后需要添加的元素的关键。忽略它,你就失去了任何订购保证。

private ChildEventListener mChildEventListener = new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
        String text = dataSnapshot.getValue(String.class);
        Log.i(TAG, "onChildAdded: " + text +  " after s");
        mAdapter.addData(text);
    }
然后

Logcat显示:

onChildAdded: 1 after null
onChildAdded: 2 after a
onChildAdded: 3 after b
onChildAdded: 6 after c
onChildAdded: 4 after c
onChildAdded: 5 after d

如果你按顺序执行这些,你会得到:

  • a: 1
  • a: 1, b: 2
  • a: 1, b: 2, c: 3
  • a: 1, b: 2, c: 3, f: 6
  • a: 1, b: 2, c: 3, d: 4, f:6
  • a: 1, b: 2, c: 3, d: 4, e: 5, f:6

答案 1 :(得分:1)

Firebase在Indexing and Ordering上有一个由查询返回的数据的部分。根据您的数据布局,您能否按照其中一种方法进行操作?

在工厂中,我确实有以下按数据字段排序的内容。

angular.module('MyApp').factory('AllPlayers', ["FireBaseData", "$firebaseArray",
    function(FireBaseData,$firebaseArray) {
        var AllPlayersRef=FireBaseData.child('Players');
        return $firebaseArray(AllPlayersRef.orderByChild('FirstName'));
    }
]);

数据结构:

Players
- 1 (Key)
    Email: ""
    FirstName: "John"
    LastName: "Doe"
    Number: 11

- 2 (Key)
    Email: ""
    FirstName: "Jane"
    LastName: "Smith"
    Number: 15

工厂将返回我的数据,Jane Smith为第一,接着是John Doe,使用FirstName字段作为订单。

如果这不起作用,那么我会同意@Frank-van-Puffelen,需要示例代码来帮助你。