更新Firebase Android中的项目

时间:2018-01-18 15:20:28

标签: java android firebase firebase-realtime-database

我有一个生日列表,如果生日结束,它应该在firebase上添加一年(以毫秒为单位)。我遇到的主要问题是如何访问确切的项目来添加年份。 Firebase项目没有通过应用程序添加,这就是为什么我不能使用getKey。这是照片。

if(daysLeft<0){
     mFirebaseDatabaseReference.child(CODEFROGDB).child(/*here i need to get to the item*/).child("bday_p").setValue(model.getBday_p() + 31556952000L);
}

Firebase Database PICTURE

2 个答案:

答案 0 :(得分:0)

您可以使用上一个值来查询要更新的项目:

if(daysLeft<0){
     mFirebaseDatabaseReference.child(CODEFROGDB)
            .orderByChild("bday_p")
            .equalTo(model.getBday_p())
            .addListenerForSingleValueEvent(new ValueEventListener(){

                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    mFirebaseDatabaseReference.child(CODEFROGDB)
                    .child(dataSnapshot.getKey())
                    .child("bday_p").setValue(model.getBday_p() + 31556952000L);
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {
                }
            });
}

答案 1 :(得分:0)

您可以使用以下代码实现此目的的简单方法:

if(daysLeft<0) {
    mFirebaseDatabaseReference.child(CODEFROGDB)
        .addListenerForSingleValueEvent(new ValueEventListener(){
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                long now = System.currentTimeMillis();
                for(DataSnapshot ds : dataSnapshot.getChildren()) {
                    Long bday_p = ds.child("bday_p").getValue(Long.class);
                    if(bday_p < now) {
                        ds.child("bday_p").getRef().setValue(bday_p + 31556952000L);
                    }
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {}
    });
}