Android: невозможно обновить поля документа в Firestore - PullRequest
0 голосов
/ 26 февраля 2020

Я пытаюсь выполнить две операции в транзакции базы данных.

  • Добавление нового документа в коллекцию A. Это успешно
  • обновление полей существующего документа в коллекции B. Это не удалось

Также проверено этот прослушиватель успеха также вызывается, но поля документа не обновляются. Путь к ссылке на документ также правильный.

database.runTransaction((Transaction.Function<Void>) transaction -> {

            message.createdAt = new Timestamp(new Date()); // just to be safe if the UI is not creating this.

            collRef.add(ModelMapper.prepareMessageModel(message)).addOnCompleteListener(task -> {

             // Added a new document in collection A

            });

            CollectionReference collRefConf = composer.composeConversationCollectionReference(conversationRequest);
            collRefConf.get(Source.SERVER).addOnCompleteListener(task -> {
                if (task.isSuccessful()) {
                    for (QueryDocumentSnapshot document : task.getResult()) {

                        // Updating an existing document in collection B

                        ConversationConfigRequest configRequest = new ConversationConfigRequest(message.conversationDocumentId,
                                document.getId());

                        DocumentReference configDocReference = composer.composeConversationConfigDocumentReference(configRequest);

                        configDocReference.update(
                                FirestoreConstants.ConversationProperties.ConversationConfig.LAST_MESSAGE, message.message
                        )
                                .addOnSuccessListener(aVoid -> {
                                    Log.d(Config.LOGTAG, "onSuccess: ");

                                })
                                .addOnFailureListener(e -> Log.d(Config.LOGTAG, "onFailure: "+e));
                    }
                }
            }).addOnFailureListener(e -> {
                Log.d("", "pullConversationConfigId: ");
            });

            return null;
        });

1 Ответ

0 голосов
/ 26 февраля 2020

Если весь объект будет изменен, вы можете попробовать использовать set, чтобы обновить весь документ. Также попробуйте использовать OncompleteListener вместо onSuccessListener, чтобы увидеть, выполняется ли задача

FirebaseFirestore.getInstance().collection().document(id)
    .set(yourObject).addOnCompleteListener{/*your code after completion here*/}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...