此问题通常在向Firestore插入大量数据时发生,因为Android中的CursorWindow缓存区间限制了返回结果的大小,而插入过程要求将所有数据获取并返回,因此如果数据量太大,CursorWindow将无法存储这些数据并抛出此异常。
解决此问题的一种方法是,在插入过程中分批处理数据,即将待插入数据分割成较小的块并一次插入一部分,而不是一次插入所有数据块。下面是示例代码:
// 数据源 List dataList = ...
// 每批数据的大小 int batchSize = 500;
// 分批插入 for (int i = 0; i < dataList.size(); i += batchSize) { int end = Math.min(dataList.size(), i + batchSize); List batch = dataList.subList(i, end);
FirebaseFirestore.getInstance().runTransaction(new Transaction.Function() {
@Override
public Void apply(Transaction transaction) throws FirebaseFirestoreException {
for (Data data : batch) {
DocumentReference docRef = FirebaseFirestore.getInstance().collection("collection_name").document(data.getId());
transaction.set(docRef, data);
}
return null;
}
});
}
这样,我们将数据分成了较小的块,并通过Transaction批量插入数据,不需要将所有数据获取并返回。
上一篇:Android%2F谷歌:是否可以提供超过90天的年度订阅促销%2F优惠?
下一篇:Android&Kotlin-ExoplayerforDRMEnabledDASHStreamReturns415ResponseCode