我创建了一个到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在这里允许重复字段。它们看起来完全一样,我在两个字段上都找不到错字。
屏幕截图如下:https://imgur.com/a/h8zVrX5
添加重复的“名称”后,我的应用程序可以正常运行!
答案 0 :(得分:0)
这是正常行为。当您说will appear immediately
时,表示您已经在该集合引用上添加了一个侦听器并开始侦听更改。 Cloud Firestore是一个实时数据库,因此当您使用侦听器时,您在数据库中执行的每个CRUD操作都将在RecyclerView中可见。
但是请注意,这不是错误,它是Cloud Firestore最重要的功能。