Android 从数据库请求图像时发生异常
当我向数据库(sqlite)发送加载图像的请求时,我的光标总是-1Android 从数据库请求图像时发生异常,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.
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)