无法从CursorWindow读取第1行第1列,其中包含2行,1列

时间:2014-06-14 10:57:13

标签: android

对于你们中的一些人来说,这可能是一个简单的问题,我想列出一个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条件时,我只得到列中的最后一项。有什么问题?

3 个答案:

答案 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行。愚蠢的错误。