【发布时间】:2018-02-19 22:13:59
【问题描述】:
我正在创建一个工作的方法,每次onComplete 完成时它都会增加一个值,但它会导致该字段上的无限循环。
例如当onComplete 结束时,该方法执行并且必须增加100 点,但它获取了点并且不断增加而没有结束。
这是我的方法:
@Override
public void afterTextChanged(Editable editable) {
refTrans.child(finalCurrentUserKey).child(Constants.FIRE_BASE_USER_DRIVER_PLUS).child("birthday").setValue(
etBirthday.getText().toString(), new DatabaseReference.CompletionListener() {
@Override
public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
addPoints(finalCurrentUserKey);
}
});
}
private void addPoints(final String finalCurrentUserKey){
// Create a reference to the DB
final FirebaseDatabase mDatabase = FirebaseDatabase.getInstance();
final DatabaseReference refPoints = mDatabase.getReference(Constants.FIRE_BASE_USER_DRIVER);
final DatabaseReference scoreRef = refPoints.child(finalCurrentUserKey).child("score/increaseScore");
//final Double[] count = new Double[1];
final String operation = "increaseScore";
scoreRef.runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData mutableData) {
Integer score = mutableData.getValue(Integer.class);
if (score == null) {
return Transaction.success(mutableData);
}
if (operation.equals("increaseScore")) {
mutableData.setValue(score + 1);
} /*else if (operation.equals("decreaseScore")){
mutableData.setValue(score - 1);
}*/
//mutableData.setValue(1);
return Transaction.success(mutableData);
}
@Override
public void onComplete(DatabaseError databaseError, boolean b, DataSnapshot dataSnapshot) {
}
});
【问题讨论】:
-
如果你想在数据库中增加一个值,你应该考虑执行一个事务。如果有多个用户都试图同时写入同一个位置,那么您现在拥有它的方式可能会导致数据库中出现不正确的值。 firebase.google.com/docs/database/android/…
-
@DougStevenson 我已经完成了相同的交易结果!
标签: java android firebase firebase-realtime-database