首页 > 解决方案 > 将 2 个哈希图添加到 Firestore 中的单个文档

问题描述

我已将 1 个 Hashmap 上传到 firestore。当我尝试将另一个 Hashmap 上传到同一个文档时,它会替换我以前的 Hashmap。为什么会这样?

我每次都更改字符串标题,但它仍然替换了以前的 Hashmap。

        String poll1 = Poll1.getText().toString().trim();
        String poll2 = Poll2.getText().toString().trim();
        String poll3 = Poll3.getText().toString().trim();
        String title = Title.getText().toString().trim();



        DocumentReference documentReference = firestore.collection("Polls").document("abc1");

        Map<String, Object> nestedData = new HashMap<>();
        nestedData.put(poll1 , 0 );
        nestedData.put(poll2 , 0);
        nestedData.put(poll3 , 0);

        Map<String, Object> upload = new HashMap<>();
        upload.put(title, nestedData);

        documentReference.set(upload).addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                Toast.makeText(polls.this, "UPLOADED", Toast.LENGTH_LONG).show();
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Toast.makeText(polls.this, "FAILED", Toast.LENGTH_LONG).show();
            }
        });

标签: javaandroidfirebasegoogle-cloud-firestore

解决方案


您的文档需要提到这必须合并而不是替换。

.set(data, SetOptions.merge())

如果它有效,试试这个。

documentReference.set(upload, SetOptions.merge()).addOnCompleteListener(new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {
            Toast.makeText(polls.this, "UPLOADED", Toast.LENGTH_LONG).show();
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            Toast.makeText(polls.this, "FAILED", Toast.LENGTH_LONG).show();
        }
    });

推荐阅读