我的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);
答案 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数据库不能直接用于存储图像文件。但是,您有以下选项:
将收到的图像保存到SD卡。可以创建一个单独的文件夹,您可以在其中存储所有图像。然后在表结构中创建列imagePath,并将图像的路径保存到此列。
渲染:在这里,您将从数据库中获取相应的路径,检查文件是否存在于该路径(可能已被用户删除),如果找到,则从文件中获取Stream,将其写入位图并关联它到了所需的容器。
将收到的位图转换为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();