Firebase Cloud Firestore获取新创建文档的自动ID

时间:2018-01-28 23:33:45

标签: android firebase google-cloud-firestore

我使用以下代码创建了一个用户,但由于用户的文档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;
            }
        });

3 个答案:

答案 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) {

       }});