2012-11-29 84 views
0

我有一個Andorid遊標包含33列和10行;但迭代通過它是花了很多時間在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

把一些痕跡,看看哪一行代碼需要時間你的循環 – fiddler

+0

我試過這樣做,但它永遠不會進入while循環或花費太長時間來打印任何東西......即它永遠不會寫入「我在寫數據」.. – RRR

回答

3

您可以先用一個while(curOutputData.moveToNext())替換moveToFirst +(而不是(!isAfterLast)+ moveToNext),並且每次迭代都會保存一次對isAfterLast的調用。

然後,我建議使用traceview來確定您花費的時間。它可能是遊標,但它也可能是你的Excel格式化程序。 (這也可以通過對excel部分進行評論來快速確定)。

(此外,這一切取決於你的意思是「取了大量的時間」什麼的)

備註:爲什麼要用cellIdx和j,它們具有相同的值和相同的含義?

0

對方回答有一個好點的, 並且除了

每次迭代執行命令curOutputData.getColumnCount()。如果結果在循環中沒有改變,你應該在循環前存儲一個整數值。

int size = curOutputData.getColumnCount(); 
for(int j=0; j < size; j++) 

您也可以創建循環之前的Cell hssfCell引用,以便它不需要被分配的每一個迴路(不知道在Dalvik有多好優化)

相關問題