Java Android写入CSV RAM问题
我正在收集一个服务中的一组传感器数据,将其存储到一个SQL表中,当用户单击一个按钮时,我获取所有SQL数据并将其保存到CSV文件中,但我不断得到Java Android写入CSV RAM问题,java,android,csv,android-sqlite,android-external-storage,Java,Android,Csv,Android Sqlite,Android External Storage,我正在收集一个服务中的一组传感器数据,将其存储到一个SQL表中,当用户单击一个按钮时,我获取所有SQL数据并将其保存到CSV文件中,但我不断得到窗口已满:请求的分配XXX错误显示在logcat中 通过谷歌搜索,我想这可能是因为Nexus5X内存使用率高 当用户单击“保存”按钮时,开始该过程的代码如下所示: File subjectFile = new File(subjectDataDir, subNum + ".csv"); try{ dbHelper.exportSubjectDa
窗口已满:请求的分配XXX
错误显示在logcat中
通过谷歌搜索,我想这可能是因为Nexus5X内存使用率高
当用户单击“保存”按钮时,开始该过程的代码如下所示:
File subjectFile = new File(subjectDataDir, subNum + ".csv");
try{
dbHelper.exportSubjectData(subjectFile, subNum);
} catch (SQLException | IOException e){
mainActivity.logger.e(getActivity(), TAG, "exportSubjectData error", e);
}
public void exportSubjectData(File outputFile, String subNum) throws IOException, SQLException {
csvWrite = new CSVWriter(new FileWriter(outputFile));
curCSV = db.rawQuery("SELECT * FROM " + DATA_TABLE_NAME + " WHERE id = " + subNum, null);
csvWrite.writeNext(curCSV.getColumnNames());
while (curCSV.moveToNext()) {
String arrStr[] = {curCSV.getString(0), curCSV.getString(1), curCSV.getString(2),
curCSV.getString(3), curCSV.getString(4), curCSV.getString(5),
curCSV.getString(6), curCSV.getString(7), curCSV.getString(8),
curCSV.getString(9), curCSV.getString(10)};
csvWrite.writeNext(arrStr);
}
csvWrite.close();
curCSV.close();
}
然后在我的DBHelper中,exportSubjectData
方法如下所示:
File subjectFile = new File(subjectDataDir, subNum + ".csv");
try{
dbHelper.exportSubjectData(subjectFile, subNum);
} catch (SQLException | IOException e){
mainActivity.logger.e(getActivity(), TAG, "exportSubjectData error", e);
}
public void exportSubjectData(File outputFile, String subNum) throws IOException, SQLException {
csvWrite = new CSVWriter(new FileWriter(outputFile));
curCSV = db.rawQuery("SELECT * FROM " + DATA_TABLE_NAME + " WHERE id = " + subNum, null);
csvWrite.writeNext(curCSV.getColumnNames());
while (curCSV.moveToNext()) {
String arrStr[] = {curCSV.getString(0), curCSV.getString(1), curCSV.getString(2),
curCSV.getString(3), curCSV.getString(4), curCSV.getString(5),
curCSV.getString(6), curCSV.getString(7), curCSV.getString(8),
curCSV.getString(9), curCSV.getString(10)};
csvWrite.writeNext(arrStr);
}
csvWrite.close();
curCSV.close();
}
首先,这类问题通常是由RAM使用引起的吗
假设我的问题是这段代码中的RAM使用率很高,那么有没有更有效的方法来做到这一点而不消耗这么多内存?它试图写入CSV的表有超过300000行和10列我猜您正在使用opencsv。您可以尝试在每次调用
csvWrite.writeNext(arrStr)
后调用csvWrite.flush()
。将数据从内存写入光盘。
您必须尝试x的最佳值