【问题标题】:How to move Firebase realtime database child value into another child value in an android studio? [duplicate]如何将 Firebase 实时数据库子值移动到 android studio 中的另一个子值? [复制]
【发布时间】:2020-02-02 16:33:24
【问题描述】:

我想将 Firebase 实时数据库子值移动到 android 工作室中的另一个子值中。 (点数:25 成总点数:来自同一个用户 uid。

{
  "Users" : {
    "8xNAsCfc3Afta2lPHHsMWHEOw8C2" : {
      "points" : 25,
      "users" : "umar"
    }
  },
  "wFinal" : {
    "8xNAsCfc3Afta2lPHHsMWHEOw8C2" : {
      "totalpoints" : 0
    }
  }
}

我想要这个

{
  "Users" : {
    "8xNAsCfc3Afta2lPHHsMWHEOw8C2" : {
      "points" : 0,
      "users" : "umar"
    }
  },
  "wFinal" : {
    "8xNAsCfc3Afta2lPHHsMWHEOw8C2" : {
      "totalpoints" : 25
    }
  }
}

【问题讨论】:

标签: android firebase firebase-realtime-database


【解决方案1】:

正如我在评论中所说的那样。

FirebaseDatabase.getInstance().getReference().child("Users").child(userUid).child("points").addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        if (dataSnapshot.exists()){
            long points = dataSnapshot.getValue(Long.class);
        //transfer the value
        FirebaseDatabase.getInstance().getReference().child("wFinal").child(userUid).child("totalpoints").setValue(points);
        //set the value at Users to 0
        FirebaseDatabase.getInstance().getReference().child("Users").child(userUid).child("points").setValue(0);
    }
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {

}
});

【讨论】:

  • 非常感谢您回答我的问题,我已经成功实现了这个方法。
【解决方案2】:

您可以做的是,当您对 Users - userId 引用执行 .setValue(points) 时,您还可以在 wFinal 引用处执行 .setValue(points)

确保在.setValue() 之后添加一个完整的侦听器,以了解每个事务何时完成。

伪代码

userRef.child(userId).child("points").setValue(0).addOnCompleteListener {

  onComplete(...) {
    wFinalRef.child(userId).child("totalPoints").setValue(points);
  } 

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-20
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    相关资源
    最近更新 更多