2012-02-23 53 views
0

我想在所有的ListView添加了一些錯誤,這些數字來自SQLite的。我使用for循環來添加它們,並使用光標來獲取它們。問題是當我刪除其中的一個,除了最後一個,for循環無法工作。我發現光標有一個「isNull」函數,我想用它,但它不起作用。關於Android光標和ListView

int itemNum=doListlist.getCount(); 
     for(int i = 0; i < itemNum; i++){ 
      if(cursor.isNull(i+1)==false){ 
       float num=Float.parseFloat(listsDbAdapter.fetchData(tableName, i+1).getString(3)); 
       float price=Float.parseFloat(listsDbAdapter.fetchData(tableName, i+1).getString(5)); 
       total+=num*price; 
      } 
      else { 
      itemNum++; 
      } 
     }  

如果你知道它總是錯誤的原因,請告訴我,謝謝!

+0

我猜如果你刪除其中的一個,光標就會失效。雖然我不知道如果我完全明白你正在嘗試做的......也許你可以看看這裏瞭解如何正確使用光標:http://www.higherpass.com/Android/Tutorials/Accessing-Data-隨着-Android的遊標/ 2/ – Tim 2012-02-23 15:40:16

+0

我只是想知道的ID在數據庫中存在或已被刪除,併成爲空(我想這會成爲爲null)。 – user1032314 2012-02-24 01:32:40

回答

0

可以理解遊標作爲對象,它表示的數據庫表在存儲器中的部分(在此內存中的表示是根據query方法的參數建立)。因此,Cursor是一個包含列數的表(您在query方法中定義這些列)以及此表中的行數。

當您使用遊標工作,你按順序讀取這些行。然後在這些行中使用列值進行操作。

聲明cursor.isNull(i+1)表示在當前行中考慮使用i+1列,並檢查此列中的值是否爲空。 所以我想你的for循環是不正確的。您應該使用遊標的moveToNext()方法瀏覽光標。

+0

謝謝你的完美答案。我想我更瞭解它,我會再試一次。 – user1032314 2012-02-25 10:47:41

0

嘗試這種` INT itemNum = doListlist.getCount(); if(cursor!= null){

 if (cursor.moveToFirst()) { 



    for(int i = 0; i < itemNum; i++){ 

      float num=Float.parseFloat(listsDbAdapter.fetchData(tableName, i+1).getString(3)); 
      float price=Float.parseFloat(listsDbAdapter.fetchData(tableName, i+1).getString(5)); 


cursor.moveToNext(); 
      } 
     } 
    } 

    cursor.close(); 
+0

謝謝你回答我。我想我得到這個問題的真正原因。 – user1032314 2012-02-25 10:49:51