gpt4 book ai didi

java - firebase 中的数据更改是从第二个按钮单击发生的,第一次单击不执行任何操作

转载 作者:行者123 更新时间:2023-12-02 10:50:58 26 4
gpt4 key购买 nike

当我第一次单击按钮时,Firebase 中的数据不会更新,从第二次单击开始,只有数据会更新。标志作为全局变量设置为 false

private void incrementDay(){
db_total = FirebaseDatabase.getInstance().getReference("Total Days");
db_total.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
try {
getTotal = (long)dataSnapshot.getValue();
setTotal=getTotal+1;
flag=true;
}catch( NullPointerException ne){
}
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
if(flag){
db_total.setValue(setTotal);
Snackbar.make(findViewById(android.R.id.content),"Days updated",Snackbar.LENGTH_SHORT).show();
}
}

最佳答案

数据是从 Firebase 异步加载的。任何需要数据的代码都需要位于加载数据时调用的onDataChange内部

所以类似:

private void incrementDay(){
db_total = FirebaseDatabase.getInstance().getReference("Total Days");
db_total.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
getTotal = (long)dataSnapshot.getValue();
setTotal=getTotal+1;
db_total.setValue(setTotal);
Snackbar.make(findViewById(android.R.id.content),"Days updated",Snackbar.LENGTH_SHORT).show();

}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
throw databaseError.toException();
}
});
}

但请注意,您正在根据当前值更新数据库值。如果两个用户几乎同时执行此操作,则只有其中一个写入操作会写入数据库。这就是为什么您应该始终将此类更新放入 Firebase 事务中。

类似于:

db_total.runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData current) {
long count = current.getValue(Long.class);
mutableData.setValue(count + 1);
return Transaction.success(mutableData);
}

@Override
public void onComplete(DatabaseError databaseError, boolean b,
DataSnapshot dataSnapshot) {
// Transaction completed
Log.d(TAG, "updating count:" + databaseError);
}
});

关于java - firebase 中的数据更改是从第二个按钮单击发生的,第一次单击不执行任何操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52192413/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com