我有一个包含33列和10行的Andorid游标;但迭代它在Android设备上花了很多时间。
curOutputData.moveToFirst();
while(curOutputData.isAfterLast()==false);
{
// curOutputData.moveToFirst();
//curOutputData.moveToNext();
System.out.println("i am writing data.."+rowIdx);
cellIdx = 0;
Row hssfRow = sheet1.createRow(rowIdx++);
for(int j=0; j<curOutputData.getColumnCount();j++)
{
Cell hssfCell = hssfRow.createCell(cellIdx++);
//String cellValue = curOutputData.getString(j);
hssfCell.setCellValue(curOutputData.getString(j));
//System.out.println("cellvalue==="+cellValue);
}
curOutputData.moveToNext();
}
我这样做是为了生成一个excel文件。请告诉我哪里出错了。非常感谢提前。
答案 0 :(得分:3)
你可以先将moveToFirst + while(!isAfterLast)+ moveToNext替换为相同的while(curOutputData.moveToNext())
,并在每次迭代时保存一次对isAfterLast的调用。
然后,我建议您使用traceview
来确定您在哪里花时间。它可能是光标,但它也可能是你的excel格式化程序。 (也可以通过评论excel部分进行测试来快速识别。)
(另外,这一切都取决于“花费大量时间”的意思)
备注:为什么要使用具有相同值和相同含义的cellIdx和j?
答案 1 :(得分:0)
另一个答案有一个好处, 另外
for(int j=0; j < curOutputData.getColumnCount(); j++)
每次迭代都会执行命令curOutputData.getColumnCount()
。如果结果在循环期间没有改变,则应该在循环之前将值存储为整数。
int size = curOutputData.getColumnCount();
for(int j=0; j < size; j++)
你也可以在循环之前创建Cell hssfCell
引用,这样就不需要在每个循环中分配它(不确定dalvik优化有多好)