首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在for循环中使用WriteBatch会产生错误

在for循环中使用WriteBatch会产生错误
EN

Stack Overflow用户
提问于 2021-05-09 04:43:37
回答 2查看 44关注 0票数 0

我有大约27,000份文档要写入我的firestore收藏夹。

为此,我使用WriteBatch,并且每隔500个文档就对其进行拆分。

我得到以下错误:

代码语言:javascript
运行
复制
java.lang.IllegalStateException: A write batch can no longer be used after commit() has been called.

im使用的代码是:

代码语言:javascript
运行
复制
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;
        }
    }

}

有没有办法解决这个问题?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2021-05-10 04:10:24

for循环中移动WriteBatch batch = db.batch();

票数 0
EN

Stack Overflow用户

发布于 2021-05-10 17:54:41

您将收到以下错误:

java.lang.IllegalStateException:调用commit()后,无法再使用写入批处理。

很可能是因为您的代码不会等待第一次提交完成。向Firestore写入500个文档需要一些时间,因为这是一个异步操作。因此,您会得到上面的错误,因为在调用commit()之后,批处理对象不能再次修改。

因此,您需要等待操作完成,然后才能向批处理添加新的写操作,并再次调用"commit()“。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67451975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档