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

Android 从数据库请求图像时发生异常,android,sqlite,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.

当我向数据库(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的DB浏览器配合使用。

在访问光标数据之前,请尝试使用游标。moveToFirst()

尝试使用此选项

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;
}

查看Android方法文档也很有好处,因为它提供了更多信息,说明了如果该方法希望作为参数返回什么。首先是db.rawQuery

运行提供的SQL并返回结果集上的光标。

对于游标,您需要使用游标变量检查对象是否存在。这可以通过使用以下方法完成:

cursor.moveToFirst();
将光标移动到下一行
如果光标已经超过结果集中的最后一个条目,则此方法将返回false。

此方法将返回一个布尔值,可用于进一步验证。如果布尔值为false,则光标中不包含任何数据/对象。如果这是真的,您就知道数据的存在。


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

请发布您没有调用的完整代码
moveToNext()
method这里有很好的解释。基本上,您应该调用data.moveToFirst()(在您的例子中是游标命名的data)