2013-04-15 58 views
0

这里是活动代码:例外:光标索引超出范围

//query 
final dbhelper helper = new dbhelper(this); 
Cursor c = helper.query(); 
boolean exist =false; 
if(c != null && c.moveToFirst()){ 
Log.d("atestdbChar1no",String.valueOf(c.getCount())); 
int i=0; 
while(c.isAfterLast()){ 
Log.d("atestdb1",String.valueOf(i++)); 
Log.d("atestdb2",String.valueOf(c.getInt(0))); 
Log.d("atestdb3",c.getString(1)); 
Log.d("atestdb4",c.getString(2)); 
c.moveToNext(); 
} 

//insert 
     ContentValues values = new ContentValues(); 
     if(!finWords.equals("null")){ 
     if(finWords.length()>index){ 
     String selectWord = finWords.substring(index, index+1); 
     values.put("character", finChar); 
     values.put("word", selectWord); 
     helper.insert(values); 

这里是SQLiteOpenHelper代码:

public void insert(ContentValues values) { 
    SQLiteDatabase db = getWritableDatabase(); 
    db.insert(TBL_NAME, null, values); 
    Log.d("test", "dbinsert"); 
    db.close(); 
} 

public Cursor query() { 
    SQLiteDatabase db = getWritableDatabase(); 
    Cursor c = db.query(TBL_NAME, null, null, null, null, null, null); 
    Log.d("test", "dbquery"); 
    return c; 
} 

我可以将数据插入到数据库 但我不能对它们进行查询 logcat说光标索引超出范围 ,只是输出一些数据,例如只输出ID 1,2,4,7然后强制关闭应用程序 但我已经插入14个数据 我的代码有什么问题?

+0

后logcat跟踪,当你说有一个例外 – Pragnani

+0

你是否在Cursor中获取数据?检查与函数c.moveToFirst()有记录返回.. – gks

回答

1

您忘记了否定c.isAfterlast(),除非您传回null,否则不必检查空游标。

if(c.moveToFirst()){ 
Log.d("atestdbChar1no",String.valueOf(c.getCount())); 
int i=0; 
while(!c.isAfterLast()){ 
Log.d("atestdb1",String.valueOf(i++)); 
Log.d("atestdb2",String.valueOf(c.getInt(0))); 
Log.d("atestdb3",c.getString(1)); 
Log.d("atestdb4",c.getString(2)); 
c.moveToNext(); 
} 
+0

解决了感谢您的帮助 –