我有大约27,000份文档要写入我的firestore收藏夹。
为此,我使用WriteBatch,并且每隔500个文档就对其进行拆分。
我得到以下错误:
java.lang.IllegalStateException: A write batch can no longer be used after commit() has been called.
im使用的代码是:
private void addData2DB(ArrayList<String> titles, ArrayList<String> authors, ArrayList<String> publishers, ArrayList<String> genres, ArrayList<String> pages) {
db = FirebaseFirestore.getInstance();
WriteBatch batch = db.batch();
double counter = 1.0;
for (int i = 0; i <= titles.size(); i++) {
Map<String, Object> data = new HashMap<>();
String title = titles.get( i );
String[] TitleWords = title.split( "\\s+" );
if (!title.isEmpty()) {
String docID = db.collection( "GeneratingID" ).document().getId();
data.put( "bookAuthor", authors.get( i ) );
data.put( "bookTitle", titles.get( i ) );
data.put( "genre", genres.get( i ) );
data.put( "pages", pages.get( i ) );
data.put( "publishedBy", publishers.get( i ) );
DocumentReference dr = db.collection( "BooksDB" ).document( docID );
batch.set( dr, data );
}
if ((double) i / 500 == counter) {
batch.commit();
counter = counter + 1;
}
}
}
有没有办法解决这个问题?
谢谢
发布于 2021-05-10 04:10:24
在for
循环中移动WriteBatch batch = db.batch();
。
发布于 2021-05-10 17:54:41
您将收到以下错误:
java.lang.IllegalStateException:调用commit()后,无法再使用写入批处理。
很可能是因为您的代码不会等待第一次提交完成。向Firestore写入500个文档需要一些时间,因为这是一个异步操作。因此,您会得到上面的错误,因为在调用commit()之后,批处理对象不能再次修改。
因此,您需要等待操作完成,然后才能向批处理添加新的写操作,并再次调用"commit()“。
https://stackoverflow.com/questions/67451975
复制相似问题