我有一个登录用户的按钮。当登录用户单击该按钮时,我想为该特定用户增加特定值。现在我使用以下代码,但它在Firebase数据库中创建了一个子项并增加了数据。我希望它应该增加特定(登录)用户子(“点”)数据。
myRef.child("points").runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(final MutableData currentData) {
if (currentData.getValue() == null) {
currentData.setValue("0");
} else {
String stringValue = (String) currentData.getValue();
int intValue = Integer.parseInt(stringValue);
int increasedIntValue = intValue + 1;
currentData.setValue(String.valueOf(increasedIntValue));
}
return Transaction.success(currentData);
}
@Override
public void onComplete(DatabaseError databaseError, boolean committed, DataSnapshot currentData) {
if (databaseError != null) {
System.out.println("Firebase counter increment failed!");
} else {
System.out.println("Firebase counter increment succeeded!");
}
}
});
数据库:
我现在能做什么?
答案 0 :(得分:0)
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
user.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.hasChild("points")) {
if (dataSnapshot.getValue() == null) {
dataSnapshot.setValue("0");
} else {
String stringValue = (String) dataSnapshot.getValue();
int intValue = Integer.parseInt(stringValue);
int increasedIntValue = intValue + 1;
dataSnapshot.setValue(String.valueOf(increasedIntValue));
}}
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseError.toException();
}
});
addListenerForSingleValueEvent:此侦听器可帮助您检测特定路径(包括该特定路径上的子项)的数据更改。此侦听器只侦听一次,并根据更改为您提供数据,直到触发此事件。