2

我正在尝试将照片保存为 SQLite 中的 blob(不仅仅是引用它)。mCurrentMediaPath 是将存储照片的当前路径。现在,我需要在拍摄照片并按下保存按钮后将其保存到数据库中(我猜是在意图之后)。

public Uri insert(byte[] image) {
    return getContentResolver().insert(MyContentProvider.CONTENT_URI7, createContentValues(image));
}
private ContentValues createContentValues(byte[] image) {
    ContentValues docsInsert = new ContentValues();
    docsInsert.put(Db.COLUMN_FILETYPE, "PHOTO");
    docsInsert.put(Db.COLUMN_NAME, mCurrentMediaPath);
    docsInsert.put(Db.COLUMN_FILE, image);
    return docsInsert;
}
// convert from bitmap to byte array
public byte[] getBytesFromBitmap(Bitmap bitmap) {
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    bitmap.compress(CompressFormat.JPEG, 70, stream);
    return stream.toByteArray();
}


private void dispatchMediaIntent(int actionCode) {
    switch(actionCode) {
    case ACTION_TAKE_PHOTO:
        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        File f = null;
        try {
            f = setUpPhotoFile(ACTION_TAKE_PHOTO);
            mCurrentMediaPath = f.getAbsolutePath();
            takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
        } catch (IOException e) {
            e.printStackTrace();
            f = null;
            mCurrentMediaPath = null;
        }
        startActivityForResult(takePictureIntent, actionCode);
        break;
    case ACTION_TAKE_VIDEO:
        Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
        startActivityForResult(takeVideoIntent, actionCode);
        break;
    default:
        break;          
    }       
}

我应该在哪里实现插入?

     //SAVING TO DATABASE
        BitmapFactory.Options bmOptions = new BitmapFactory.Options();
        bmOptions.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(mCurrentMediaPath, bmOptions);
        Bitmap bitmap = BitmapFactory.decodeFile(mCurrentMediaPath, bmOptions);

        insert(getBytesFromBitmap(bitmap));
4

1 回答 1

1

Create bitmap of your image then

Bitmap bmp = BitmapFactory.decodeStream(new FileInputStream(f), null, null);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[] byteArray = stream.toByteArray();

dba.open();

dba.insertPhoto(byteArray);

where dba is object of database class.

create table in database class like:

private static final String CREATETABLE_PHOTO = "create table eqpphoto("EImage BLOB " + ");";

public static final String TABLE_PHOTO = "eqpphoto";

public long insertPhoto(byte[] EImage) {

    try {
        System.out.println("Function call : ");
        ContentValues values = new ContentValues();

        values.put(EIMAGE, EImage);
        return db.insert(TABLE_PHOTO, null, values);
    } catch (Exception e) {
        e.printStackTrace();
        return 0;
    }
}
于 2013-06-19T12:26:12.293 回答