Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 异常:光标索引超出范围_Android_Database_Eclipse - Fatal编程技术网

Android 异常:光标索引超出范围

Android 异常:光标索引超出范围,android,database,eclipse,Android,Database,Eclipse,以下是活动中的代码: //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(

以下是活动中的代码:

//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个数据
我的代码怎么了?

您忘了对c.isAfterlast()求反,除非您将null传递回,否则您不必检查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(); 
}

日志跟踪后,当您说有异常时,您是否在游标中获取数据?使用函数检查c.moveToFirst()是否有要返回的记录。。