android - 无法在 Firebase 上为特定用户增加孩子的价值
问题描述
我有一个用于登录用户的按钮。当登录用户单击该按钮时,我想为该特定用户增加一个特定值。现在我正在使用下面的代码,但它会在 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!");
}
}
});
数据库:
我现在能做什么?
解决方案
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:此侦听器可帮助您检测特定路径(包括该特定路径的子路径)处数据的变化。此侦听器仅侦听一次,并根据更改为您提供数据,直到触发此事件。
推荐阅读
- javascript - 未捕获(承诺中)错误:返回的值无效,它是否耗尽了 Gas?(在本地工作,但不在 Ropsten 上)
- c# - 需要帮助在多个项目上存储信息并检索这些项目并将它们显示在另一个屏幕上
- java - Selenium - 错误:元素不可交互
- javascript - 部署时 Razzle 反应未加载正确的包
- git - 如何在压缩和合并后重新整合主题分支?
- ios - 在起始位置显示 CollectionViewCell
- javascript - Angular Universal 在本地主机上工作,但不在 Nginx 服务器上
- javascript - 寻找一种更好的方法来更改具有多个图像的图像 onclick
- angular - 如何使用 Ionic 2+ 和 Angular 2+ 检测滚动?
- sql - 合并两个表并计算金额(货币转换)