对于你们中的一些人来说,这可能是一个简单的问题,我想列出一个colmun的所有值,在这里我使用这个查询:
Cursor c = null;
ArrayList<String> names=new ArrayList<String>() ;
c = mDb.rawQuery("SELECT username FROM contacts",null);
c.moveToFirst();
while (c.moveToNext()) {
for(int j=0;j<c.getCount();j++){
names.add(c.getString(j));
}
}
即时通讯
06-14 06:36:56.017: E/CursorWindow(2608): Failed to read row 1, column 1 from a
CursorWindow which has 2 rows, 1 columns.
当我在for循环中放入while条件时,我只得到列中的最后一项。有什么问题?
答案 0 :(得分:1)
while (c.moveToNext()) {
for(int j=0;j<c.getCount();j++){
names.add(c.getString(j));
}
c.getCount()
将返回游标中的行数。所以你不应该用它来循环列。每行只包含一个用户名列。所以你可以直接用索引位置访问它。
while (c.moveToNext()) {
names.add(c.getString(0));
// or better
names.add(c.getString(c.getColumnIndex("username")));
}
答案 1 :(得分:1)
如果您看到代码,则只能阅读一列username
,因此您不需要内部for
循环。只需使用do while
循环。做一些像下面的事情
.
.
c.moveToFirst();
if(c.getCount()>0){
do{
names.add(c.getString(0));
}while(c.moveToNext());
}
答案 2 :(得分:0)
当您尝试返回超出范围的索引时也会发生此错误,例如我正在执行以下操作
return word + "\r\n" + mCur.getString(2);
我只有2行。愚蠢的错误。