Android Firebase不断获取旧值

时间:2018-01-03 12:34:55

标签: java android firebase firebase-realtime-database

我在Android项目中使用Firebase。我有一个ValueEventListener,它继续获取旧值,即使该节点已被其他设备修改。它似乎无视其他设备所做的更新。

这是我的代码:

ValueEventListener listener =  destinationDatabaseReference.child(somestring)
                    .addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                            if(dataSnapshot.getValue()==null)
                            {
                            }
                            else
                            {
                                //here I keep on getting the old value
                                string value = (long) dataSnapshot.child("someString").getValue();
                            }
                            }

3 个答案:

答案 0 :(得分:0)

使用如下查询: -

Query query = mDatabase.getReference().child("posts").orderByChild("date").limitToLast(1);
query.addChildEventListener(new ChildEventListener() {
                @Override
                public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                    if(dataSnapshot!=null){
                        String notific = String.valueOf(dataSnapshot.getValue());
                        Log.d("key",dataSnapshot.getKey());
                        Log.d("title",String.valueOf(dataSnapshot.child("title").getValue()));
                        Log.d("content",String.valueOf(dataSnapshot.child("content").getValue()));
                    }
                }

答案 1 :(得分:0)

谢谢大家的帮助。我试过你的建议,但它对我不起作用:( 但是,我找到了这个链接,我想分享以防有人需要它。

对于此类问题,您必须使用事务操作。请参阅以下相关有用的链接:

Updating firebase data in several devices by Transaction Operations

Similar Question with Working Answer

答案 2 :(得分:-1)

尝试使用这样的最终引用:

URL url = new URL(yourURL);
final Firebase root = new Firebase(url.toString());
root.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) DataSnapshot dataSnapshot) {
                            if(dataSnapshot.getValue()==null)
                            {
                            }
                            else
                            {
                                //here I keep on getting the old value
                                string value = (long) dataSnapshot.child("someString").getValue();
                            }
}