通过批量写入添加文档,还是通过控制台手动添加文档(可能是Firestore错误?)

时间:2018-07-12 06:17:17

标签: android firebase google-cloud-firestore

我创建了一个到Firestore导出器的CSV文件,每个字段都与我的应用所需的完全相同,以读取数据并将其填充到回收站中。

成功导出后,字段对我来说看起来相同,条目不会出现在回收站上。

我使用了批量写入,并且所有输入在控制台上都很好看。

但是,如果我在同一收藏夹上手动添加1个条目,则该条目将立即显示在回收站上!

这会是Firestore错误吗?有人遇到过吗?

编辑-批量编写代码:

  try { 
        InputStream inputStream = getContentResolver().openInputStream(selectedfile);

        final CSVReader reader = new CSVReader(new InputStreamReader(inputStream));
        String [] nextLine;
        String column1 ="", column2="", column3="", column4 = "";
        Integer count=0;


        FirebaseFirestore fs =  FirebaseFirestore.getInstance();
        FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
                .setTimestampsInSnapshotsEnabled(true)
                .build();
        fs.setFirestoreSettings(settings);

        WriteBatch batch = fs.batch();

        while ((nextLine = reader.readNext()) != null) {
            if (count > 0) {

                DocumentReference productList = fs
                        .collection("ProductList")
                        .document("VendorA")
                        .collection("Items")
                        .document(nextLine[0]);

                Map<String, Object> data = new HashMap<>();
                data.put(column1, nextLine[0]);
                data.put(column2, nextLine[1]);
                data.put(column3, nextLine[2]);
                data.put(column4, nextLine[3]);

                batch.set(productList, data);
                count++;
            } else {
                //first line of CSV file are the headers
                column1 = nextLine[0];
                column2 = nextLine[1];
                column3 = nextLine[2];
                column4 = nextLine[3];
                count++;
            }
        }

        batch.commit().addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                mStatusUpdate.setText(getString(R.string.statusupdate, reader.getLinesRead() - 1));
                mVendorName.setText("");
            }
        });
        reader.close();

    } catch (IOException e) {
        e.printStackTrace();
    }

编辑#2: 我想我找到了问题。看附图。我刚刚也将此报告给了Firebase支持。

我从Firebase控制台添加了另一个带有“名称”的字段。

我不确定为什么Firestore在这里允许重复字段。它们看起来完全一样,我在两个字段上都找不到错字。

screenshot 屏幕截图如下:https://imgur.com/a/h8zVrX5

添加重复的“名称”后,我的应用程序可以正常运行!

1 个答案:

答案 0 :(得分:0)

这是正常行为。当您说will appear immediately时,表示您已经在该集合引用上添加了一个侦听器并开始侦听更改。 Cloud Firestore是一个实时数据库,因此当您使用侦听器时,您在数据库中执行的每个CRUD操作都将在RecyclerView中可见。

但是请注意,这不是错误,它是Cloud Firestore最重要的功能。