2012-02-23 3 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++; 
      } 
     }  

Если вы знаете причину, почему это всегда ошибка, пожалуйста, скажите мне, THANKYOU !!!

+0

Я думаю curser аннулируется, если удалить один из них. Хотя я не уверен, полностью ли я понимаю, что вы пытаетесь сделать ... Может быть, вы можете посмотреть здесь, как правильно использовать курсор: http://www.higherpass.com/Android/Tutorials/Accessing-Data- С-Android-курсоры/2/ – Tim

+0

Я просто хочу знать, что идентификатор существует в базе данных или он был удалён и стал нулевым (я думаю, он станет равным нулю). – user1032314

ответ

0

Вы можете понять Курсор как объект, представляющий часть таблицы базы данных в памяти (это представление памяти построено в соответствии с параметрами метода query). Таким образом, курсор представляет собой таблицу с количеством столбцов (вы определяете эти столбцы в методе query) и количество строк в этой таблице.

Когда вы работаете с курсором, вы последовательно читаете эти строки. Затем в этой строке вы используете значения столбцов.

Заявление cursor.isNull(i+1) означает, что в текущей строке вы рассматриваете столбец i+1 и проверяете, имеет ли значение в этом столбце значение NULL. Итак, я думаю, ваш цикл for не подходит. Вы должны перемещаться по курсору с помощью методов курсора moveToNext().

+0

Благодарим вас за прекрасный ответ. Думаю, я знаю это лучше, и я попробую еще раз. – user1032314

0

попробуйте этот ` int itemNum = doListlist.getCount(); если (курсор! = 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

Смежные вопросы