2014-02-11 59 views
-1

我试图创造从表中检索数据的方法,但我与光标一个问题:Android的数据库和光标

public ArrayList<Contenu> getTest(){ 

    ArrayList<Contenu> test = new ArrayList<Contenu>(); 

    String query = new String("select valeur from table_contenu"); 
    Cursor c = bdd.rawQuery(query , null); 
    c.moveToFirst(); 
    while (c.moveToNext()) 
    { 
     Contenu contenu = new Contenu(); 
     contenu.setValeur(c.getString(c.getPosition())); // bug 
     test.add(contenu); 
    } 

    return test; 

日志猫:

java.lang.IllegalStateException: Couldn't read row 1, col 1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it. 

回答

2

考虑到Artoo Detoo答案也应该做到以下几点

更改此:

c.moveToFirst(); 
while (c.moveToNext()) 
{ 
... 
} 

对于这一点:

if(c != null) 
{ 
    c.moveToFirst(); 
    do 
    { 
     Contenu contenu = new Contenu(); 
     contenu.setValeur(c.getString(c.getColumnIndex("valeur"))); 
     test.add(contenu); 
    }while(c.moveToNext()); 
    c.close(); 
} 

如果没有,你会被跳过第一行。

+0

你是对的,谢谢 – user3244162

2

见这个:

contenu.setValeur(c.getString(c.getPosition())); // bug 

应该是:

contenu.setValeur(c.getString(c.getColumnIndex("valeur"))); // NO MORE BUG 
+0

getPosition不需要String args – user3244162

+1

我编辑了我的拼写错误。 –

+1

它与getColumnIndex一起工作,谢谢 – user3244162