我遇到了如何准确使用Firebase Transaction runTransaction()
方法的问题。在这里,当用户单击按钮时,我试图从数据库中获取值并将其递增,然后再将其发送回数据库。现在问题是如果多个用户同时点击按钮,为此我使用的是Firebase事务。但是不知道如何编写代码。这是我尝试但不工作的代码。我只想将值从0更新为1,如果只有一个用户点击按钮,并且如果许多用户同时点击,则其中一个用户应该等到第一个用户完成更新。
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(final DataSnapshot dataSnapshot) {
final String mainValue = (String) dataSnapshot.child("values").child("number").getValue();
btnInc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
myRef.runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(final MutableData mutableData) {
mutableData.child("number").setValue(String.valueOf(Integer.parseInt(mainValue) + 1));
return Transaction.success(mutableData);
}
@Override
public void onComplete(DatabaseError databaseError, boolean b, DataSnapshot dataSnapshot) {
Toast.makeText(MainActivity.this, "Result: "+b, Toast.LENGTH_SHORT).show();
Toast.makeText(MainActivity.this, "Error: "+databaseError.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
});
}
@Override
public void onCancelled(DatabaseError databaseError) {}
});