访问游标元素时出错

时间:2012-02-27 13:51:08

标签: android sqlite

我试图通过游标获取表中的所有IDs。该表有4行,当我尝试通过0以外的任何索引访问游标时,应用程序崩溃。

伙计们,问题仍然存在,甚至c.getInt(0)也行不通......我真的不知道我的错误在哪里???

logcat还表明错误可能来自

Toast.makeText(getApplicationContext(), "id="+dbd.getIDs()[0], Toast.LENGTH_SHORT).show();

我的意思是c.getint(0)返回id,c.getint(2)返回错误。这是代码:

public int []getIDs() {
    SQLiteDatabase db = this.getReadableDatabase();
    SQLiteCursor c = (SQLiteCursor) db.rawQuery("SELECT " + BaseColumns._ID + " FROM Demo ", null);

    int []r = new int[c.getCount()];
    c.moveToFirst();

    do{
        r[c.getPosition()] = c.getInt(0); 
    }while(c.moveToNext());

    c.close();
    db.close();
    return r;       
}

4 个答案:

答案 0 :(得分:1)

您的选择是对ID列的投影(从...中选择列,列是您感兴趣的列ID,并且您只指定了一列)。因此答案只有一列,即ID。对索引为>的列的任何访问权限0将无效。

要访问其他列,请在查询的投影中为其命名。

答案 1 :(得分:0)

c.getInt(0)仅返回当前行中第一个colunn的值。

试试这段代码:

do{
int r = c.getInt(0);
Log.d("Your class name","id value = "+r);
}while(c.moveToNext());

答案 2 :(得分:0)

您可以将Cursor想象为一个表格。有行和列。并且光标指向此表中的特定行。因此,要获得所有id,您应该跨越所有行。

c.getInt(ind)在此语句中,索引指向索引为ind的列。因此,在您的代码中,您尝试获取第二列和第三列,并且根据您的代码,没有这些列。

要获得正确的代码,您应该创建一个循环并遍历光标的所有行。您还应该使用c.getInt(0)来获取列值。

答案 3 :(得分:0)

假设您正在选择适当的数据,那么您的问题是您没有准备要迭代的Cursor。

在迭代之前,请致电:

c.moveToFirst();

像这样:

int []r = new int [c.getCount()];
c.moveToFirst();
    do{
        r[c.getPosition()] = c.getInt(0);
    }while(c.moveToNext());

    c.close();
    db.close();
    return r;   

LogCat中很好地说明了这一点。我不记得它是如何放置的,但这条信息非常具有启发性。请尽可能多地发布日志,特别是好位。

另外,我将'r'修改为数组。因为它只是返回最后一行的值。