如何将Firebase实时数据库子值移动到android studio中的另一个子值?

问题描述 投票:1回答:2

我想将Firebase实时数据库子值移动到android studio中的另一个子值。 (点数: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
2个回答
0
投票

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

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

}
});

0
投票

[您可以做的是在对.setValue(points)参考进行Users - userId的同时,在.setValue(points)参考中进行wFinal的操作

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

伪代码

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

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

}
© www.soinside.com 2019 - 2024. All rights reserved.