Получение идентификатора документа из коллекции Firestore (Android) - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь извлечь автоматически сгенерированный идентификатор в документе, чтобы использовать его в другом месте.

Вот полный код:

mStartChatButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            final HashMap<String, Object> myChatFields = new HashMap<>();
            myChatFields.put("dateJoined", ServerValue.TIMESTAMP );
            myChatFields.put("status", "");
            myChatFields.put("snoozeUntil", "");
            myChatFields.put("myCharacter", "");
            myChatFields.put("requestedCustomChatCode", "");
            myChatFields.put("groupChatName", "");
            myChatFields.put("toInviteMembers", "");
            myChatFields.put("lastMessage", "");
            myChatFields.put("lastMessageTimeStamp", ServerValue.TIMESTAMP);

            mWhammyUsersCollection.document(mCurrentUserId).collection("my-chats")
                    .document().set(myChatFields)
                    .addOnSuccessListener(new OnSuccessListener<Void>() {
                @Override
                public void onSuccess(Void aVoid) {

                    String chatId = mWhammyUsersCollection.document(mCurrentUserId)
                            .collection("my-chats").document().getId();

                    Log.v("CHATS", chatId);

                    myChatFields.put("chatCardId", chatId);

                    Intent goToChatActivity = new Intent(UserProfileActivity.this,
                            ChatActivity.class);
                    startActivity(goToChatActivity);

                }
            });

Как видите, яЯ использую код, показанный ниже, чтобы сгенерировать коллекцию под названием «my-chats», а .document () создает автоматически сгенерированный идентификатор документа.

mWhammyUsersCollection.document(mCurrentUserId).collection("my-chats")
                    .document().set(myChatFields)
                    .addOnSuccessListener(new OnSuccessListener<Void>() {

Затем я использую строку кодапоказано ниже, чтобы попытаться получить идентификатор из этого документа.

String chatId = mWhammyUsersCollection.document(mCurrentUserId)
                            .collection("my-chats").document().getId();

Наконец, используя приведенную ниже строку кода, я пытаюсь поместить ее в созданную мной HashMap.

myChatFields.put("chatCardId", chatId);

У меня две основные проблемы:

1) Строка кода, которую я использую для извлечения идентификатора документа, не работает и извлекает какой-то другой новый автоматически сгенерированный идентификатор (я думаю, это так).потому что я использую метод .document () перед методом .getId ()).

2) Кроме того, информация по какой-то причине не добавляется в HashMap с последней строкой кода, которую я поместил.

Как я могу решить эти две проблемы?

Чтобы объяснить это немного болееre графически:

Изображение базы данных

Я пытаюсь получить «1» и добавить его в области «2».

Ответы [ 2 ]

0 голосов
/ 20 октября 2018

1) Строка кода, которую я использую для извлечения идентификатора документа, не работает и извлекает какой-то другой новый автоматически сгенерированный идентификатор (я предполагаю, что это потому, что я использую .document () перед.* Возвращает DocumentReference, указывающего на новый документ с автоматически сгенерированным идентификатором в этой коллекции.

Таким образом, каждый раз, когда вы вызываете метод document(), новый новый идентификаторгенерироваться.Чтобы решить эту проблему, измените следующие строки кода:

mWhammyUsersCollection.document(mCurrentUserId).collection("my-chats")
                .document().set(myChatFields)
                .addOnSuccessListener(/* ... */);

на

String id = mWhammyUsersCollection.document(mCurrentUserId).collection("my-chats")
                .document().getId();
mWhammyUsersCollection.document(mCurrentUserId).collection("my-chats")
                .document(id).set(myChatFields)
                .addOnSuccessListener(/* ... */);

Видите, я использовал id, который был сгенерирован впервые в ссылке.Теперь внутри метода onSuccess() вы должны использовать тот же id, который был сгенерирован выше:

myChatFields.put("chatCardId", id);

И не более новый, как вы делаете в своем реальном коде.

2) Кроме того, информация по какой-то причине не добавляется в HashMap с последней строкой кода, которую я поместил.

Это происходит из-за неправильной ссылки.Использование справочника, содержащего правильный id, решит вашу проблему.

0 голосов
/ 17 октября 2018

В первой части вы захотите получить ссылку на документ в функции onSuccess и void.Так что это будет выглядеть примерно так -

      mWhammyUsersCollection.document(mCurrentUserId).collection("my-chats").add(myChatFields)
                .addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
        @Override
        public void onSuccess(DocumentReference documentReference) { 


                String chatId = documentReference.getId();

                Log.v("CHATS", chatId);

                myChatFields.put("chatCardId", chatId);

                Intent goToChatActivity = new Intent(UserProfileActivity.this,
                        ChatActivity.class);
                startActivity(goToChatActivity);

            }
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...