java - 从 firebase 添加数据会导致无限循环
问题描述
请帮忙,当我想从 Firebase 数据库添加用户点数据时遇到问题
我想将前一个用户的点添加到新获得的点上。这是我使用的代码
final DatabaseReference userDataRef = FirebaseDatabase.getInstance().getReference().child("Users").child(userRefEmail);
userDataRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String userCurrentPoint = dataSnapshot.child("point").getValue().toString();
if (userCurrentPoint != null) {
int finalPoint = Integer.parseInt(userCurrentPoint) + poin;
userDataRef.child("point").setValue(String.valueOf(finalPoint));
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
但是在我使用的时候,firebase 数据库中出现了无限连续加点的情况,我该如何处理呢?
解决方案
使用SingleValueEvent
而不是ValueEventListener
,SingleValueEvent
它只会被调用一次:
userDataRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String userCurrentPoint = dataSnapshot.child("point").getValue().toString();
if (userCurrentPoint != null) {
int finalPoint = Integer.parseInt(userCurrentPoint) + poin;
userDataRef.child("point").setValue(String.valueOf(finalPoint));
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
推荐阅读
- powershell - 加快 Powershell 中的 AD 组/成员资格报告
- asp.net - 与 asp.net 相关:复选框的“已选中”属性的值
- java - 不能使用从代号一创建 CEF 浏览器
- python - 我正在尝试使用具有 moudule 袜子的 python3 程序
- swift - 以编程方式在 iPad 上的 SwiftUI 中隐藏 MasterView
- c# - C# Charts - 如何找到可缩放区域的 X 轴坐标?
- django - 带有uwsgi的apache2上的django数据库错误
- node.js - 我怎么能意识到我被困在 Express 中间件上
- swift - 没有这样的模块'Segment'
- node.js - 将 require 视为 .ts 文件中的导入