关于Android游标和listView的错误

时间:2012-02-23 15:32:00

标签: android listview cursor

我想在所有listView中添加一个数字,这些数字来自SQLite。我使用for循环来添加它们,我使用游标来获取它们。问题是当我删除其中一个,除了最后一个,for循环不起作用。我发现游标有一个函数“isNull”,我想使用它,但它不起作用。

    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++;
            }
        }    

如果你知道它总是出错的原因,请告诉我,谢谢!!!

2 个答案:

答案 0 :(得分:0)

您可以将Cursor理解为表示内存中数据库表的一部分的对象(此内存表示是根据query方法的参数构建的)。因此,Cursor是一个具有列数的表(您在query方法中定义这些列)和此表中的多个行。

使用Cursor时,您可以按顺序读取这些行。然后在这些行中使用列值进行操作。

语句cursor.isNull(i+1)表示在当前行中考虑i+1列并检查此列中的值是否为空。 所以我猜你的for循环不合适。您应该使用游标的moveToNext()方法浏览游标。

答案 1 :(得分: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();