我使用以下代码创建了一个用户,但由于用户的文档ID是随机生成的,因此我想在创建后将DocumentReference存储在变量中。我怎么能这样做?
FirebaseFirestore db = FirebaseFirestore.getInstance();
// Create a new user with a first, middle, and last name
Map<String, Object> user = new HashMap<>();
user.put("username", "username");
user.put("first", "Firstname");
user.put("last", "Lastname");
user.put("born", 1990);
// Add a new document with a generated ID
db.collection("users")
.add(user)
.addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
@Override
public void onSuccess(DocumentReference documentReference) {
Log.d(TAG, "DocumentSnapshot added with ID: " + documentReference.getId());
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(TAG, "Error adding document", e);
return null;
}
});
答案 0 :(得分:0)
由于add()是异步的并且立即返回,因此您应该期望通过您提供的成功侦听器使用生成的DocumentReference执行任何。尝试将某些内容分配给局部变量可能不会有帮助,因为调用回调时调用add()的方法的其余部分几乎肯定会完成。
答案 1 :(得分:0)
由于要在用户文件夹下创建文档,因此文档参考应为用户文件夹和文档ID的组合
db.collection("users").document(documentReference.getId())
答案 2 :(得分:0)
您可以创建一个新文档并保存其ID,然后在该ID上设置与您要求的功能相同的数据。尝试以下代码。
db = FirebaseFirestore.getInstance();
String id = db.collection("users").document().getId();
db.collection("users").document(id).set(user)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
//your success code here
}})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
}});