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