【问题标题】:How to get document id from firestore database如何从 Firestore 数据库中获取文档 ID
【发布时间】:2019-07-17 03:52:31
【问题描述】:

我正在尝试通过调用 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();
                        }
                    }
                }
            }
        });

我已经尝试过这段代码,显然我可以用这段代码调用doc.getId(),但是这段代码根本没有填充我的recyclerview

        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 (DocumentSnapshot doc : queryDocumentSnapshots) {
                        Pegawai pegawai = doc.toObject(Pegawai.class);
                        pegawai.setId(doc.getId());
                        pegawaiList.add(pegawai);
                    }
                }
            }
        });

【问题讨论】:

    标签: java android firebase google-cloud-firestore


    【解决方案1】:

    如果您将 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。我希望这会对那里的人有所帮助。

    【讨论】:

    • 你也可以这样做,你每次都会得到一个独一无二的价值! String _key = db.collection("requests") .document() .getId();
    【解决方案2】:

    DocumentChange 对象有一个方法 getDocument(),它返回一个 QueryDocumentSnapshot 对象。这是DocumentSnapshot 的子类,这意味着它还有一个getId() 方法。所以你应该可以使用doc.getDocument().getId() 来获取正在处理的文档的ID。

    【讨论】:

    • 我通过创建一个方法来加载我的数据并在数据发生更改时调用它,这就像一个迂回的方式。但是getDocument() 方法就像一个魅力!没想到这么简单
    【解决方案3】:

    以下是如何在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});
          });
        });
    
    

    【讨论】:

    • 问题标记为 Java,并显示 Java,但您显示的是 JavaScript。这可能对他们没有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    • 2020-12-05
    • 2018-09-03
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    相关资源
    最近更新 更多