android - Firebase onDataChange 方法增加值
问题描述
我试图获得一个值,然后将该值增加一。问题是我无法从 onDataChange 方法中获取此值,如果我在方法内执行工作,我会得到循环,并且它会不断地向该值添加值。我应该怎么办?
这是我的代码:
rootRef.child("users").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
int rat = Integer.parseInt(dataSnapshot.child(current_user).child("rating").getValue().toString());
System.out.println(rat);
rat = rat + 1;
rootRef.child("users").child(current_user).child("rating").setValue(rat);
System.out.println(rat);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
解决方案
如果您需要从 firebase db 接收一次数据,那么您需要使用addListenerForSingleValueEvent(...)
而不是
addValueEventListener(...)
. 然后onDataChange()
只会返回一次。
addValueEventListener
每次有任何值更新时都会调用。
在上述情况下,每次增加值并再次更新节点时addValueEventListener
都会重复调用,因此它的行为类似于无限循环。
推荐阅读
- php - 使用 PHP 下载带有警告框的文件
- winapi - 如何管理任务栏上的应用程序图标?
- c# - System.Data.EvaluateException HResult=0x80131920 消息=无法对 System.Int32 和 System.String 执行“=”操作
- java - 如何使 Result Scan Barcode 与 Data Retrofit 匹配?
- python - 我如何在 tkinter python 中输入孟加拉语或 Unicode 语言
- crystal-reports - C1reportDesigner(CrystalReport)中的垂直线没有增长
- java - 通过 Java 代码向 JIRA 创建问题
- oracle-adf - 如何在 PC 上为基于 Web 的应用程序启用日志
- rabbitmq - RabbitMQ:ACCESS_REFUSED 即使队列是非独占的
- html - 如何设置svg坡度的高度?这是我的代码