【问题标题】:Update item in Firebase Android更新 Firebase Android 中的项目
【发布时间】:2018-01-19 23:15:34
【问题描述】:

我有一个生日列表,如果生日结束,它应该在 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);
}

【问题讨论】:

  • 你可以访问之前的值吗?我的意思是添加 1 年之前的值
  • 是的,它会打印在我的应用程序列表中

标签: java android firebase firebase-realtime-database


【解决方案1】:

实现这一点的最简单方法是使用以下代码:

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) {}
    });
}

【讨论】:

  • 这向每个用户投放一年的广告,而不仅仅是日期为 -1 的用户
  • 您没有在问题中提及此约束,但请参阅我的更新答案,其中我添加了一个 if 语句 if(bday_p == -1)。现在可以了吗?
  • 现在什么都没有改变,我的意思是那些生日已经过去的人的数据没有增加一年。它增加了所有用户的生日,而不仅仅是一周前生日的人
  • 但是后来发生了什么?
  • 它增加了数据库中所有项目的 bday_p 值,而不仅仅是那些生日已经过去的人
【解决方案2】:

您可以使用之前的值来查询要更新的项目:

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) {
                }
            });
}

【讨论】:

  • 什么都没有发生
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-22
  • 1970-01-01
  • 2014-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-16
相关资源
最近更新 更多