从数据库请求图像时发生异常

时间:2018-12-28 12:57:45

标签: android sqlite

当我向数据库(sqlite)发送请求以加载图像时,我的光标始终为-1。

public Cursor getData(int id){

        SQLiteDatabase db = this.getWritableDatabase();
        String query = "SELECT * FROM " + TABLE_NAME + " WHERE ID = " + id;
        Log.d(TAG, query);
        Cursor data = db.rawQuery(query, null);
        return data;
}

结果是应用崩溃,该日志记录在logcat中:

  

致命异常:主要       流程:com.master.tobias.phono,PID:10721       android.database.CursorIndexOutOfBoundsException:已请求索引-1,大小为1

编辑:该查询在SQLite的数据库浏览器中正常工作。

3 个答案:

答案 0 :(得分:1)

在访问游标数据之前尝试cursor.moveToFirst()

答案 1 :(得分:0)

尝试这个

public Cursor getData(int id){

        SQLiteDatabase db = this.getWritableDatabase();
        String query = "SELECT * FROM " + TABLE_NAME + " WHERE ID = " + id;
        Log.d(TAG, query);
        Cursor cursor= db.rawQuery(query, null);
        while(cursor.moveToFirst()){
          //get your value over here
        }
        return data;
}

答案 2 :(得分:0)

看一下Android的方法文档也很有帮助,因为它提供了有关该方法(如果期望作为参数并将返回)的更多信息。首先,db.rawQuery

  

运行提供的SQL,并在结果集上返回游标。
  SQLiteDatabase

对于游标,您需要使用Cursor变量检查对象的存在。可以使用以下方法完成此操作:

cursor.moveToFirst();
  

将光标移到下一行。
  如果光标已经超出结果集中的最后一个条目,则此方法将返回false。
  Cursor

此方法将返回一个布尔值,您可以将其用于进一步的验证。如果布尔值为false,则游标中不包含任何数据/对象。如果是事实,则说明您已经存在数据。

因此,您缺少此功能,因此您需要将对象移动到第一行,这将使您能够确定查询是否为空。