Я запускаю setvalue и слушатель Onchildadded многопоточным способом через akka, чтобы сначала перевести чат в базу данных, а затем жду, когда метод onchildadded что-то сделает.Но сталкиваются с двумя проблемами: 1. иногда onchiladded не вызывается, а иногда вызывается дважды.Мой код такой, как показано ниже:
DatabaseReference fromDatabaseReference = FirebaseDatabase
.getInstance().getReference(messagePath);
final DatabaseReference fromRef = fromDatabaseReference.push();
fromRef.setValue(Value, new CompletionListener() {
public void onComplete(DatabaseError firebaseError,
DatabaseReference firebase) {
Chat chat = new Chat().setfromUser(UUID)
.setMessageId(fromRef.getKey());
chatsRef.push().setValueAsync(chat);
}
});
fromDatabaseReference.addChildEventListener(new ChildEventListener() {
ChatMessage msgAdded;
public void onChildAdded(DataSnapshot snapshot,
String previousChildName) {
try {
msgAdded = snapshot.getValue(ChatMessage.class);
if(msgAdded.getFromUserType().equalsIgnoreCase("XXX"))
{
count.countDown();
testResult = checkAndVerifyRespone(msgAdded);
if(testResult)
{
stepResult = true;
}
createDocReport(conversation);
ref.removeValue(new CompletionListener(){@Override
public void onComplete(DatabaseError error, DatabaseReference ref) {
count.countDown();
}});
} }
}
Теперь, когда этот код выполняется с использованием akka с использованием разных действующих лиц, иногда добавляемый потомок не запускается, иногда он не ждет и не вызывает функцию внутри него.