如何将Firebase实时数据库子值移动到Android工作室中的另一个子值?



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

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

我想要这个

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

正如我在评论中所说,像这样的事情。

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

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

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

伪代码

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

相关内容

最新更新