我正在使用firebase实时数据库,我创建了2个节点,一个包含一个相同项目的列表,一个仅包含列表的大小,如下所示:
+ RegResult
+ 1000
+ aaaa
+ bbbb
// 10 item like this
+ 2000
// 13 item
+ RegResultOnlyToTal
+ 1000 : 10
+ 2000 : 13
,当我向RegResult添加/删除项目时,我使用runTransaction来增加/减少RegResultOnlyToTal,当我测试服务器时间时,它工作得很好,但是当它变大时,我又检查了一次,这是错误的,好像RegResultOnlyToTal总是比RegResult中的实际大小小的数字。这是我的代码添加和删除项
public void addRegResult(FBRegResult fbRegResult, String key) {
FirebaseConnection.getInstance().getDBRefRegResult().child(key).child(fbRegResult.getUsername()).setValue(fbRegResult);
FirebaseConnection.getInstance().getDBRefRegResultOnlyToTal().child(key).runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData currentData) {
if (currentData.getValue() == null) {
currentData.setValue(1);
} else {
currentData.setValue((Long) currentData.getValue() + 1);
}
return Transaction.success(currentData);
}
@Override
public void onComplete(@Nullable DatabaseError databaseError, boolean b, @Nullable DataSnapshot dataSnapshot) {
}
});
}
public void removeRegResult(FBRegResult fbRegResult, final String key) {
FirebaseConnection.getInstance().getDBRefRegResult().child(key).child(fbRegResult.getUsername()).removeValue();
FirebaseConnection.getInstance().getDBRefRegResultOnlyToTal().child(key).runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData currentData) {
if (currentData.getValue() == null) {
currentData.setValue(0);
} else {
currentData.setValue((Long) currentData.getValue() - 1);
}
if ((Long) currentData.getValue() == 0) {
currentData.setValue(null);
return Transaction.success(currentData);
}
return Transaction.success(currentData); //we can also abort by calling Transaction.abort()
}
@Override
public void onComplete(@Nullable DatabaseError databaseError, boolean b, @Nullable DataSnapshot dataSnapshot) {
}
});
}
有人可以告诉我我错了吗?