gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 16:34:43 24 4
gpt4 key购买 nike

我正在尝试提取文档下自动生成的 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);

}
});

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

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

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

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

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

myChatFields.put("chatCardId", chatId);

我遇到两个主要问题:

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

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

如何解决这两个问题?

更形象地解释一下:

Picture of database

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

最佳答案

1) The line of code I'm using to extract the document Id is not working and is extracting some other new auto-generated id (I'm guessing it is because I'm using the .document() method before the .getId() method).

不,发生这种情况是因为您正在调用 CollectionReference 的 document()方法两次:

Returns a DocumentReference pointing to a new document with an auto-generated ID within this collection.

因此,每次调用 document() 方法时,都会生成一个全新的 ID。要解决此问题,请更改以下代码行:

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) Also the information for some reason does not get added to the HashMap with the last line of code I put.

发生这种情况是因为您使用了错误的引用。使用包含正确 id 的引用将解决您的问题。

关于java - 从 Firestore 集合中检索文档 ID (Android),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61984264/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com