Android 在同一类的ondatachange中使用setvalue
我想从firebase中读取数据,以增加数据量并写回firebase。这是我的职责:Android 在同一类的ondatachange中使用setvalue,android,firebase,Android,Firebase,我想从firebase中读取数据,以增加数据量并写回firebase。这是我的职责: StatData = FirebaseDatabase.getInstance().getReference("Statistic"); Getstat = FirebaseDatabase.getInstance().getReference("Statistic"); Getstat.addValueEventListener(new ValueEventL
StatData = FirebaseDatabase.getInstance().getReference("Statistic");
Getstat = FirebaseDatabase.getInstance().getReference("Statistic");
Getstat.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Stat stat = dataSnapshot.getValue(Stat.class);
int count = stat.getStatP();
int statP = count + 1;
Stat a = new Stat(statP);
StatData.setValue(a);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
我使用相同的类Stat来读写数据。是否可以使用它?将基于节点当前值的值写入节点。您的示例如下:
postRef.runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData mutableData) {
Stat stat = mutableData.getValue(Stat.class);
if (stat == null) {
// Node doesn't exist or its value isn't known yet => return success
return Transaction.success(mutableData);
}
int count = stat.getStatP();
int statP = count + 1;
stat = new Stat(statP);
// Set value and report transaction success
mutableData.setValue(p);
return Transaction.success(mutableData);
}
@Override
public void onComplete(DatabaseError databaseError, boolean b, DataSnapshot dataSnapshot) {
// Transaction completed
Log.d(TAG, "statTransaction:onComplete:" + databaseError);
}
});
我想它会起作用……但你会得到一个无止境的循环。每次在
GetStat
listener中捕获更改时,您都将递增计数器,并在GetStat
listener中捕获新更改,然后再次递增它……您确定要这样做吗?这是因为在数据库中,两个引用都针对相同的路径,基本上我只想增加一次。例如,Getstat从firebase读取数据,该值为1,然后在增量变为2后,Statdata会将其作为值2写回到firebase中感谢您的帮助