Я пытаюсь сохранить изображения с телефона Android в БД SQLite. Вот код:
Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera c) {
currentPictureName = Utils.getUserName(getApplicationContext())
+ System.currentTimeMillis() + ".jpg";
DBHelper helper = new DBHelper(getApplicationContext());
SQLiteDatabase db = helper.getReadableDatabase();
ContentValues values = new ContentValues();
values.put("name", currentPictureName);
values.put("image", data);
//db.insert(DBHelper.TABLE_NAME, null, values);
DBHelper.insertDB(db, DBHelper.TABLE_NAME, null, values);
mCamera.startPreview();
}
};
DBHelper.java
package com.apps.terrapin;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class DBHelper extends SQLiteOpenHelper {
private static Context mContext;
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "terrapin";
public static final String TABLE_NAME = "images";
private static final String TABLE_CREATE =
"CREATE TABLE " + TABLE_NAME + " (" +
"_id INTEGER PRIMARY KEY, name TEXT, image BLOB);";
DBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
mContext = context;
}
public static void insertDB(final SQLiteDatabase db, String tableName, String hack, final ContentValues values) {
Log.e("TAG", "Insert DB");
new Thread(new Runnable() {
public void run() {
db.insert(DBHelper.TABLE_NAME, null, values);
}
}).start();
}
@Override
public void onCreate(SQLiteDatabase db) {
Log.e("TAG", "Creating DB");
db.execSQL(TABLE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion >= newVersion)
return;
onCreate(db);
}
}
Проблема в том, что мое приложение несколько раз правильно сохраняет изображения, а затем, когда я нажимаю кнопку сохранения изображения, оно зависает. Затем Android просит меня закрыть его. У меня была эта проблема с обычным insert
методом, поэтому я думал, что вставка вставки в поток может помочь. Но это не так. Что здесь не так? Logcat не показывает ошибок, есть одна строка, которая говорит
12-13 05:02:08.005: I/InputDispatcher(93): Application is not responding:
Window{406d17f8 com.apps.terrapin/com.apps.terrapin.TerraPin paused=false}.
10013.7ms since event, 10012.2ms since wait started
Я использую уровень API 10