参考币Firebase数据库的倍数硬币,直到应用程序崩溃



我在我的应用程序中添加了引用硬币系统,如果你将其引用给某人,你将获得100个硬币&这个人引用了你正在使用的代码,get是一样的。但是问题是,当我运行应用程序并使用推荐码时,除非应用程序崩溃,否则硬币会不断增加。两个账户中的硬币都应该增加100,但除非应用程序崩溃,否则它们会从0增加到24000或更多。

以下代码为:

reference
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
ProfileModel model = snapshot.child(oppositeUID).getValue(ProfileModel.class);
ProfileModel myModel = snapshot.child(user.getUid()).getValue(ProfileModel.class);
int coins = model.getCoins();
int updatedCoins = coins + 100;
int myCoins = myModel.getCoins();
int myUpdate = myCoins + 100;
HashMap<String, Object> map = new HashMap<>();
map.put("coins", updatedCoins);
HashMap<String, Object> myMap = new HashMap<>();
myMap.put("coins", myUpdate);
reference.child(oppositeUID).updateChildren(map);
reference.child(user.getUid()).updateChildren(myMap)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
dialog.dismiss();
Toast.makeText(InviteActivity.this, "Congrats", Toast.LENGTH_SHORT).show();
}
});
}

代码中的问题在于使用addValueEventListener。这意味着您正在实时监听更改。每当数据库中发生更改时,侦听器就会启动。由于您在执行更新的同一位置侦听,因此侦听器会一次又一次地启动。您需要的是addListenerForSingleValueEvent,以便只获取一次数据。

要解决此问题,只需将调用更改为:

addValueEventListener()

收件人:

addListenerForSingleValueEvent()

您的代码将非常好地工作。

最新更新