如何从ImageView中检索图像并将其存储在Android中的Sqlite数据库中?

时间:2014-04-15 08:13:35

标签: android sqlite imageview

我的activity.xml文件中有一个ImageView。我正在设置一个从服务器检索的图像。我想将这张图片从ImageView插入我的Sqlite数据库。任何人都可以向我解释如何做到这一点?我在Sqlite中的表就是这样me ( fbId LONG PRIMARY KEY,fbname TEXT,fbuserid INTEGER,fbpic BLOB,ph TEXT,email TEXT)请逐步告诉我,因为我是数据库新手 我添加了以下代码,但是插入错误,插入是未定义的

 Bitmap photo = ((BitmapDrawable)v.getDrawable()).getBitmap();
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    photo.compress(Bitmap.CompressFormat.PNG, 100, bos);
    byte[] bArray = bos.toByteArray();
    Databasehandler db =new Databasehandler(this);    
    ContentValues values = new ContentValues();         
    values.put("image", bArray);            
    db.insert("image" , null, values);

3 个答案:

答案 0 :(得分:3)

使用以下方法获取图像视图的位图:

Bitmap photo = ((BitmapDrawable)image.getDrawable()).getBitmap();

创建位图的字节数组:

ByteArrayOutputStream bos = new ByteArrayOutputStream();
photo.compress(Bitmap.CompressFormat.PNG, 100, bos);
byte[] bArray = bos.toByteArray();

然后您可以使用以下方式将数据保存在表格中。

db = YourDBHelper.getInstance(ctx).getWritableDatabase();    
ContentValues values = new ContentValues();         
values.put("image", bArray);            
db.insert(TABLE_NAME , null, values);

答案 1 :(得分:1)

SQLITE数据库不能直接用于存储图像文件。但是,您有以下选项:

  1. 将收到的图像保存到SD卡。可以创建一个单独的文件夹,您可以在其中存储所有图像。然后在表结构中创建列imagePath,并将图像的路径保存到此列。

    渲染:在这里,您将从数据库中获取相应的路径,检查文件是否存在于该路径(可能已被用户删除),如果找到,则从文件中获取Stream,将其写入位图并关联它到了所需的容器。

  2. 将收到的位图转换为BASE64字符串。将其作为String存储到数据库。

    渲染:在这里,您必须将BASE64转换回Bitmap并将其关联到所需的容器。

答案 2 :(得分:0)

将其保存在sqlcard上的sdcard和sdcard路径上

   Bitmap bitmap = ((BitmapDrawable)image.getDrawable()).getBitmap();
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    bitmap2.compress(Bitmap.CompressFormat.JPEG, 100,stream);
    File file = new File(path);
    FileOutputStream fOut = new FileOutputStream(file);

    bitmap2.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
    fOut.flush();
    fOut.close();