java - 向 Firebase 实时数据库中的现有整数数据添加值
问题描述
我有一个按钮可以更新数据库中的 int 数据值,但我想在 Firebase 实时数据库中的现有整数数据中添加一个值,而不仅仅是用另一个值替换它。
“points”的子节点中的当前整数值为 400。我想给它添加一个数字,然后更新它。例如,如果我添加 200,它将更新 firebase 内的数据,然后在那里显示 600。
如果有人能帮我解决这个问题,我将不胜感激?
主要代码:
Button btnDone;
DatabaseReference DBR;
int z = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tapcard);
btnDone = findViewById(R.id.buttonDone);
DBR = FirebaseDatabase.getInstance().getReference().child("Member");
btnDone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
DBR.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
int count = (int) dataSnapshot.getChildrenCount();
for (z = 1; z < count + 1; z++) {
DBR = FirebaseDatabase.getInstance().getReference().child("Member").child(String.valueOf(z));
DBR.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
dataSnapshot.getRef().child("points").setValue(100);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
Intent i = new Intent(TapCardActivity.this, HomeActivity.class);
startActivity(i);
}
});
}
奖励等级:
public class RewardsClass implements Serializable {
private String Name;
private String Description;
private int img;
private int points;
public RewardsClass(String name, String description, int img, int points) {
Name = name;
Description = description;
this.img = img;
this.points = points;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String getDescription() {
return Description;
}
public void setDescription(String description) {
Description = description;
}
public int getImg() {
return img;
}
public void setImg(int img) {
this.img = img;
}
public int getPoints() {
return points;
}
public void setPoints(int points) {
this.points = points;
}
}
解决方案
向实时数据库中的属性添加值的最简单方法是使用(相当新的)increment()
操作。
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference userRef = rootRef.child("Member").child(String.valueOf(z));
userRef.child("points").setValue(ServerValue.increment(200));
另见:
推荐阅读
- bash - 如何“挤压”目录级别
- security - 有人可以通过设置 x-hasura-role 来伪造对 Hasura GraphQL Engine 的请求吗?
- java - 赋值的左边一定是变量?
- c++ - 在 Visual Studio 2017 中使用 CMake 向静态库添加依赖项不起作用
- c# - 有没有办法在属性中输入变量(参数)?
- laravel - 使用 vue.js 和 laravel 哪种方法更好?
- octave - Octave GUI 命令窗口 - 我可以增加显示的行数和列数吗?
- debugging - 如何在 VS Code 中调试 Neutralino?
- excel - 单元格中特殊字符之后/之前的粗体部分文本
- react-native - 如何将现有的 React Native App 升级到新的 React Native 版本?我们有任何文件吗?