Я работаю с базой данных Firebase в реальном времени, я создал 2 узла, один содержит список того же элемента, а другой содержит только размер списка, подобный этому:
+ RegResult
+ 1000
+ aaaa
+ bbbb
// 10 item like this
+ 2000
// 13 item
+ RegResultOnlyToTal
+ 1000 : 10
+ 2000 : 13
и я использовал runTransaction для увеличения / уменьшения RegResultOnlyToTal при добавлении / удалении элемента в RegResult, он хорошо работает, когда я проверяю время сервера, но когда он становится большим, я проверял снова, и это было неправильно, кажется, что 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) {
}
});
}
Может кто-нибудь сказать мне, где я был не прав?