0

我有一个包含 33 列和 10 行的 Andorid 游标;但是在安卓设备上迭代它需要很多时间。

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文件。请告知我哪里出错了。提前谢谢了。

4

2 回答 2

3

您可以首先将 moveToFirst + while(!isAfterLast) + moveToNext 替换为一个while(curOutputData.moveToNext())相同的,并在每次迭代时为您节省一次对 isAfterLast 的调用。

然后,我建议使用traceview来确定您在哪里花费时间。它可能是光标,但也可能是您的 Excel 格式化程序。(这也可以通过评论测试的 excel 部分来快速识别)。

(另外,这一切都取决于你所说的“花费大量时间”的意思)

备注:为什么使用 cellIdx 和 j,它们具有相同的值和相同的含义?

于 2012-11-29T10:45:41.900 回答
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 优化得有多好)

于 2012-11-29T11:08:21.240 回答