我使用下面的代码来处理一个临时SQLite表:
public class DBHelperForTemp extends SQLiteOpenHelper {
private final static String DB_NAME = "tempdb";
private final static int DB_VERSION = 3;
public DBHelperForTemp(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String createTable = "CREATE TABLE tbl ( ID INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, image BLOB )";
db.execSQL(createTable);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS tbl");
onCreate(db);
}
public boolean add_Temp_Values(String name, byte[] image) throws SQLiteException {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("name", name);
contentValues.put("image", image);
long result = db.insert("tbl", null, contentValues);
return result != -1;
}
public Cursor get_Data(){
SQLiteDatabase db = this.getWritableDatabase();
String query = "SELECT * FROM tbl";
return db.rawQuery(query, null);
}
public void ClearData(){
SQLiteDatabase db = this.getWritableDatabase();
db.execSQL("delete from tbl");
}
}
将数据保存到临时:
private void doTemp(){
final Bitmap photo = ((BitmapDrawable) mPhotoImageView.getDrawable()).getBitmap();
boolean insertData = mDBTemp.add_Temp_POI_Values(mNameEditText.getText().toString(),
Utils.imageToByteArray(photo) );
if (insertData){
Toast.makeText(this, R.string.fb_success, Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, R.string.fb_error, Toast.LENGTH_SHORT).show();
}
finish();
}
private void onSubmit(){
final DBHelperForTemp mDBTemp = new DBHelperForTemp(this);
final Cursor data = mDBTemp.get_Data();
if (data != null && data.getCount() != 0 && data.moveToFirst()){
for (int i = 0; i < data.getCount(); i++) {
final String name = data.getString(data.getColumnIndex("name"));
final byte[] byteArray = data.getBlob(data.getColumnIndex("image"));
final Bitmap photo = BitmapFactory.decodeByteArray(byteArray, 0 , byteArray.length);
.........
E/UncaughtException: java.lang.IllegalStateException: Couldn't read row 0, col 1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
at android.database.CursorWindow.nativeGetString(Native Method)
at android.database.CursorWindow.getString(CursorWindow.java:451)
at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
at com.test.test.activities.ActivityMain.onSubmit
可能您存储的图像太大,CursorWindow的最大大小为每行2048KB
问题内容: 我已经将游标初始化如下: 游标本身在同一活动中的单独方法中使用: 它给了我以下错误: 每次我重新运行应用程序时,堆栈跟踪都指向此行。那里总是会给出一个错误。 该数据库是这样的: 我在SO上阅读了几篇类似的文章,但它们并没有使我知道出了什么问题。任何输入表示赞赏。 问题答案: 游标的列索引从零开始,因此请更改: 到
我知道这个问题以前被问过很多次,但在本例中是不同的,因为错误只发生在试图将图像保存到数据库时,而其他问题不是处理图像。如果有一个,请与链接评论。 因为我经常使用log.d,所以它确实在logcat中表示以下内容: updateNote updateNote----此处图像 如果您遵循方法中的代码,就应该如此。下面是DbBitmapUtility类中的方法,我使用它来获取字节数组,以便将图像存储为B
我已经创建了一个非常简单的数据库android应用程序。它接受输入并显示结果。添加按钮用于添加输入,删除按钮用于删除存储在SQLite数据库中的输入。我在Android SQLite中的光标指向正确,但仍然面临错误:由:java.lang.IllegalStateException引起:无法从CursorWindow读取第0,col-1行。在从中访问数据之前,请确保光标已正确初始化。以下是游标部分
这就是问题所在,我找不到错误在哪里,因为stacktrace不指向我的项目的类,而是指向android原生的类。我尝试在代码的每个部分都放断点,但是当我单击子代码时,没有一个断点被访问。 顺便说一下,我使用ViewHolder模式来处理视图,适配器是一个CursorTreeAdapter 下面是我的代码--完整的stacktrace在最后:
日志猫 由:java.lang.IllegalStateException引起:无法从CursorWindow读取第0行,第5行。在从中访问数据之前,请确保光标已正确初始化。在Android.database.cursorwindow.nativegetString(本机方法)在Android.database.cursorwindow.getString(cursorwindow.java:46
TextWatcher代码: LogCat错误: