在.add()之后无法将.getKey()传递给Cloud Firestore

时间:2017-11-05 23:30:58

标签: java android firebase google-cloud-firestore

我正在从Firebase实时数据库迁移到Cloud Firestore。以前,我会在实时数据库下.push(),我会得到.push()的密钥如下:

final String key = mBaseRef.child("ABC").push().getKey();

在新的Cloud Firestore下,此方法似乎不可用。我正在这样做:

mStoreBaseRef.collection("ABC").add(pollMap).addOnCompleteListener(new OnCompleteListener<DocumentReference>() {
    @Override
    public void onComplete(@NonNull Task<DocumentReference> task) {
        String key = String.valueOf(mStoreBaseRef.collection("ABC").document().getId());
        Log.v("KEY", key);
        Toast.makeText(getApplicationContext(),key,Toast.LENGTH_LONG).show();
    }
}

日志根本没有返回创建的密钥。

3 个答案:

答案 0 :(得分:2)

作为完成任务的结果,将返回对添加的文档的引用。文档ID可从中获取:

    mStoreBaseRef.collection("ABC").add(pollMap)
            .addOnCompleteListener(new OnCompleteListener<DocumentReference>() {
        @Override
        public void onComplete(@NonNull Task<DocumentReference> task) {
            if (task.isSuccessful()) {
                DocumentReference docRef = task.getResult();
                String key = docRef.getId();
                Log.v("KEY", key);
                Toast.makeText(getApplicationContext(), key, Toast.LENGTH_LONG).show();
            }
        }
    });

答案 1 :(得分:2)

您可以替换

final String key = mBaseRef.child("ABC").push().getKey();

DocumentReference key = db.collection("ABC").document();

这将返回自动生成的ID。 然后,您可以在以下时间引用它:

key.set(data);

或者您可以将Firebase推送ID设为:

key.getId();

答案 2 :(得分:0)

您首先可以通过此代码获取 ID

Access to fetch at 'https://dev.xxx.xxx/contactform/' from origin 'https://cdpn.io' has been blocked by CORS policy: Request header field cache-control is not allowed by Access-Control-Allow-Headers in preflight response.

以及您要为此文档设置值

 db = FirebaseFirestore.getInstance();
 String documentId=db.collection("MyCollection").document().getId();