Java 如何从firestore数据库获取文档id

Java 如何从firestore数据库获取文档id,java,android,firebase,google-cloud-firestore,Java,Android,Firebase,Google Cloud Firestore,我正试图通过调用doc.getId()来检索文档id,但我无法从此代码中调用它 db.collection("Pegawai").addSnapshotListener(new EventListener<QuerySnapshot>() { @Override public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable Fi

我正试图通过调用
doc.getId()
来检索文档id,但我无法从此代码中调用它

        db.collection("Pegawai").addSnapshotListener(new EventListener<QuerySnapshot>() {
            @Override
            public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {
                if(e != null) {
                    Log.d(TAG, e.toString());
                }
                if (queryDocumentSnapshots != null) {
                    for (DocumentChange doc: queryDocumentSnapshots.getDocumentChanges()) {
                        if (doc.getType() == DocumentChange.Type.ADDED) {
                            Pegawai pegawai = doc.getDocument().toObject(Pegawai.class);
                            pegawai.setId(doc.getId());
                            pegawaiList.add(pegawai);

                            pegawaiListAdapter.notifyDataSetChanged();
                        }
                    }
                }
            }
        });

下面是如何在Javascript中解决它,也许这将帮助您将其转换为Java。 使用以下方法,我们可以动态地检索文档id。请注意,我们使用了
snapshotChanges()
。这很重要,因为一旦我们订阅了这个函数,订阅中包含的就是文档id

saveMyValuesHere: any[] = []

getPegawai() {

    return this.db.collection('Pegawai').snapshotChanges();

  }

 getPegawai().subscribe(serverItems => {
      this.saveMyValuesHere = [];
      serverItems.forEach(a => {
        const data = a.payload.doc.data();
        const id = a.payload.doc.id;
        this.saveMyValuesHere.push({ id, ...data});
      });
    });


对象有一个返回对象的方法。这是一个子类,意味着它也有一个方法。因此,您应该能够使用
doc.getDocument().getId()
获取正在处理的文档的ID。

如果您将FirestoreRecyclerAdapter与Recyclerview一起使用,请执行此操作

 DocumentSnapshot snapshot = options.getSnapshots().getSnapshot(position);
            String dbKey = snapshot.getId();
            Log.d(TAG, "The database Key is : "+ dbKey);
然后你可以像这样把它绑在视图支架上

    holder.setDocumentId(dbKey);

然后您可以在任何地方检索它,具体取决于getter和setter。我希望这会对其他人有所帮助。

问题用Java标记,并显示Java,但您显示的是JavaScript。这可能对他们没有帮助。我通过创建一个方法来加载我的数据,并在数据发生更改时调用它,这就像一种迂回的方式。但是
getDocument()
方法工作起来很有魅力!我不认为这是简单的你也可以做到这一点,你会得到一个独特的价值,每次!字符串_key=db.collection(“requests”).document().getId();
    holder.setDocumentId(dbKey);