我试图通过游标获取表中的所有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;
}
答案 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'修改为数组。因为它只是返回最后一行的值。