Firebase Onchildadded слушатель не ждет и при вызове в многопоточной среде - PullRequest
0 голосов
/ 23 мая 2019

Я запускаю 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 с использованием разных действующих лиц, иногда добавляемый потомок не запускается, иногда он не ждет и не вызывает функцию внутри него.

...