从 Firestore 集合中检索文档 ID (Android)

Kav*_*Kav 5 java android firebase google-cloud-firestore

我正在尝试提取文档下自动生成的 ID,以便我可以在其他地方使用它。

这是完整的代码:

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);

                }
            });
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我正在使用下面所示的代码生成一个名为“my-chats”的集合,并且 .document() 正在创建自动生成的文档 ID。

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

然后我使用下面显示的代码行尝试从该文档获取 id。

String chatId = mWhammyUsersCollection.document(mCurrentUserId)
                            .collection("my-chats").document().getId();
Run Code Online (Sandbox Code Playgroud)

最后使用下面的代码行,我尝试将其放入我创建的 HashMap 中。

myChatFields.put("chatCardId", chatId);
Run Code Online (Sandbox Code Playgroud)

我有两个主要问题:

1)我用来提取文档ID的代码行不起作用,并且正在提取一些其他新的自动生成的ID(我猜这是因为我在.getId之前使用.document()方法() 方法)。

2)此外,由于某种原因,我输入的最后一行代码没有将信息添加到 HashMap 中。

我该如何解决这两个问题?

更形象地解释一下:

数据库图片

我正在尝试检索“1”并将其添加到“2”区域中。

R. *_*ght 1

对于第一部分,您需要在 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);

            }
        });
Run Code Online (Sandbox Code Playgroud)