我的应用程序从Room中上载的excel文件中保存数据,然后在选定列(由用户)中搜索关键字,然后显示具有该关键字的单元格的所有行。
它成功读取了小的Excel文件,但是如果我在此行上载了2 Mb以上的文件,则会卡住
Workbook myWorkBook = WorkbookFactory.create(inputStream);
此错误详细信息..
java.lang.OutOfMemoryError
Failed to allocate a 40 byte allocation with 32 free bytes and 32B until OOM, max allowed footprint 402653184, growth limit 402653184
我按照这个http://blog.kondratev.pro/2015/08/reading-xlsx-on-android-4-and-hopefully.html进行了编码。
请问如何解决?
感谢
答案 0 :(得分:1)
只需添加
repositories {
maven {
url "https://jitpack.io"
}
}
还有
implementation 'com.github.kiranbjm:xlsxparser:1.01'
到您的应用程序级别Gradle文件
,您可以将其与
一起使用InputStream is = new FileInputStream(new File("/path/to/workbook.xlsx"));
Workbook workbook = StreamingReader.builder()
.rowCacheSize(100) // number of rows to keep in memory (defaults to 10)
.bufferSize(4096) // buffer size to use when reading InputStream to file (defaults to 1024)
.open(is); // InputStream or File for XLSX file (required)
答案 1 :(得分:0)
尝试在AndroidManifest.xml的android:largeHeap="true"
标签中添加<application>
。但是,如果这是针对分发给用户的应用程序,则应考虑其他方法。大多数人不会欣赏您的应用占用了设备的全部内存。最好是使用基于服务器的解决方案来解析文件,并让查询仅显示显示结果所需的数据。