如何处理Firebase实时数据库中的脱机事务?

时间:2016-09-05 11:18:57

标签: android firebase firebase-realtime-database

我有一个addValueEventListener,可以监听Firebase实时数据库中的任何值更改。在线模式下,一切正常。

但是在离线模式下,设备处于脱机状态,我的Web服务器在Firebase实时数据库上完成了多次交易,其价值与我从Android安装的监听器相同。设备上线后,它只会监听最后一笔交易并跳过其间完成的其他交易。

PFB参考link。到目前为止我做过的PFB代码:

     FirebaseDatabase.getInstance().setPersistenceEnabled(false);
        FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
DatabaseReference myRef = firebaseDatabase.getReference("mykey");
        myRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                    HashMap<String, Object> key_Value = (HashMap<String, Object>) dataSnapshot.getValue();
                    for (String key : key_Value.keySet()) {
                        System.out.println("firebase key is "+key);
            }

            @Override
            public void onCancelled(DatabaseError error) {
                // Failed to read value
                Log.w("feroz ", "Failed to read value.", error.toException());
            }
        });
    }

1 个答案:

答案 0 :(得分:0)

Firebase实时数据库存储从查询中返回的信息,以便在断开连接时使用。对于在断开连接时开发的问题,Firebase实时数据库会继续处理已堆叠的信息。如果请求信息没有堆叠,Firebase实时数据库会从附近的保留区加载信息。当我们在线返回时,我们的信息将堆叠并反映查询。

例如,我们的应用程序中有一些代码,我们对Firebase实时数据库中的最后四项内容进行了分析

DatabaseReference scoresRef = FirebaseDatabase.getInstance().getReference("scores");
scoresRef.orderByValue().limitToLast(4).addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot snapshot, String previousChild) {
      System.out.println("The " + snapshot.getKey() + " dinosaur's score is " + snapshot.getValue());
    }
});