如何存储图像SQLite数据库 [英] how to store image in sqlite database
本文介绍了如何存储图像SQLite数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在我的应用程序,我上传从画廊的形象,这是我上载要存储在database.But如何存储位图在数据库中,我将位图字符串并保存在数据库中的图像,但同时retriving的,因为它是字符串我不能给字符串赋值给ImageView的。
Imageupload.class:
公共类Imageupload12延伸活动{
按钮buttonLoadImage;
ImageView的targetImage;
INT I = 0;
数据库数据库=新的数据库(本);
串I1;
字符串IMG;
@覆盖
公共无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.main5);
buttonLoadImage =(按钮)findViewById(R.id.loadimage);
targetImage =(ImageView的)findViewById(R.id.targetimage);
叠B = getIntent()getExtras()。
如果(B!= NULL)
{
IMG = b.getString(图像);
targetImage2.setImageURI(图像);
//我收到错误,因为我不能指定字符串ImageView的。
}
buttonLoadImage.setOnClickListener(新Button.OnClickListener(){
公共无效的onClick(查看为arg0){
// TODO自动生成方法存根
意向意图=新的意图(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
Log.i(照片,+意图);
startActivityForResult(原意,我);
I = I + 1;
}});
}
@覆盖
保护无效onActivityResult(INT申请code,INT结果code,意图数据){
// TODO自动生成方法存根
super.onActivityResult(要求code,因此code,数据);
开关(要求code){
情况下0:
如果(结果code == RESULT_OK){
乌里targetURI中= data.getData();
// textTargetUri.setText(targetUri.toString());
点阵位图;
尝试 {
位= BitmapFactory.de codeStream(getContentResolver()openInputStream(targetURI中));
targetImage.setImageBitmap(位);
I1 = bitmap.toString();
Log.i(firstimage ........,+ I1);
targetImage.setVisibility(0);
SQLiteDatabase DB = database.getWritableDatabase();
db.execSQL(INSERT INTO上传VALUES('+ I1 +'););
}赶上(FileNotFoundException异常E){
// TODO自动生成的catch块
e.printStackTrace();
}
}
打破;
}
}
}
Image.class:
公共类图片扩展活动{
数据库数据库=新的数据库(本);
静态EfficientAdapter适配器,适配器1;
静态的ListView LV1;
静态SQLiteDatabase分贝;
静态EfficientAdapter ADP;
静态游标C1;
静态矢量<串GT;图像=新矢量<串GT;();
@覆盖
公共无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.main);
DB = database.getReadableDatabase();
C1 = db.rawQuery(SELECT * FROM上传;,NULL);
如果(c1.moveToFirst()){
做 {
IMAGE.add(c1.getString(0)的ToString());
}而(c1.moveToNext());
c1.close();
}
LV1 =(ListView控件)findViewById(R.id.List);
适配器=新EfficientAdapter(本);
lv1.setAdapter(适配器);
ImageView的附加=(ImageView的)findViewById(R.id.imv1a);
add.setOnClickListener(新OnClickListener(){
@覆盖
公共无效的onClick(视图v){
// TODO自动生成方法存根
IMAGE.clear();
意图I =新的意图(Image.this,Imageupload12.class);
startActivity(ⅰ);
}
});
}
私有静态类EfficientAdapter扩展了BaseAdapter {
//保护的最终上下文语境= NULL;
保护LayoutInflater mLayoutInflater;
AlertDialog.Builder aBuilder;
公共EfficientAdapter(上下文的背景下){
// TODO自动生成构造函数存根
mLayoutInflater = LayoutInflater.from(上下文);
}
@覆盖
公众诠释getCount将(){
// TODO自动生成方法存根
返回IMAGE.size();
}
@覆盖
公共对象的getItem(INT位置){
// TODO自动生成方法存根
返回的位置;
}
@覆盖
众长getItemId(INT位置){
// TODO自动生成方法存根
返回的位置;
}
@覆盖
公共查看getView(最终诠释的立场,观点convertView,ViewGroup中父){
// TODO自动生成方法存根
最后ViewHolder mVHolder;
如果(convertView == NULL){
convertView = mLayoutInflater.inflate(R.layout.pjtlistdetails,父母,假);
mVHolder =新ViewHolder();
mVHolder.t1 =(TextView中)convertView.findViewById(R.id.pjtdetails);
mVHolder.time =(TextView中)convertView.findViewById(R.id.name);
mVHolder.imv =(的ImageButton)convertView.findViewById(R.id.editic);
mVHolder.imvd =(ImageView的)convertView.findViewById(R.id.delete);
mVHolder.imvf =(ImageView的)convertView.findViewById(R.id.fwd);
mVHolder.imv.setOnClickListener(新View.OnClickListener(){
@覆盖
公共无效的onClick(视图v){
字符串IMG = IMAGE.elementAt(位置);
Log.i(形象......,+ IMG);
上下文CTX = v.getContext();
意图myIntent =新意图();
CTX = v.getContext();
myIntent.setClass(CTX,Imageupload12.class);
myIntent.putExtra(形象,IMG);
ctx.startActivity(myIntent);
IMAGE.clear();
}
});
静态类ViewHolder {
的ImageButton IMV;
ImageView的IMVD,imvf;
}
解决方案
您必须使用一滴存储图像。
例如:存储一个图像到数据库
公共无效insertImg(INT ID,位图图片){
byte []的数据= getBitmapAsByteArray(IMG); //这是一个函数
insertStatement_logo.bindLong(1,ID);
insertStatement_logo.bindBlob(2,数据);
insertStatement_logo.executeInsert();
insertStatement_logo.clearBindings();
}
公共静态的byte [] getBitmapAsByteArray(位图位图){
ByteArrayOutputStream的OutputStream =新ByteArrayOutputStream();
bitmap.com preSS(比较pressFormat.PNG,0,OutputStream的);
返回outputStream.toByteArray();
}
检索dB的图片
公共位图的getImage(int i)以{
字符串曲=从表中选择IMG那里feedid =+我;
光标CUR = db.rawQuery(曲,NULL);
如果(cur.moveToFirst()){
byte []的imgByte = cur.getBlob(0);
cur.close();
返回BitmapFactory.de codeByteArray(imgByte,0,imgByte.length);
}
如果(CUR = NULL和放大器;!&安培;!cur.isClosed()){
cur.close();
}
返回null;
}
In my application i am uploading an image from gallery and the image which i uploaded want to store in database.But how to store bitmap in database i am converting bitmap to string and saving in database but while retriving the as it is string am not able to assign that string to imageview.
Imageupload.class:
public class Imageupload12 extends Activity {
Button buttonLoadImage;
ImageView targetImage;
int i=0;
Database database=new Database(this);
String i1;
String img;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main5);
buttonLoadImage = (Button)findViewById(R.id.loadimage);
targetImage = (ImageView)findViewById(R.id.targetimage);
Bundle b=getIntent().getExtras();
if(b!=null)
{
img=b.getString("image");
targetImage2.setImageURI("image");
//i am getting error as i cant assign string to imageview.
}
buttonLoadImage.setOnClickListener(new Button.OnClickListener(){
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent intent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
Log.i("photo",""+intent);
startActivityForResult(intent, i);
i=i+1;
}});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode) {
case 0:
if (resultCode == RESULT_OK){
Uri targetUri = data.getData();
// textTargetUri.setText(targetUri.toString());
Bitmap bitmap;
try {
bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(targetUri));
targetImage.setImageBitmap(bitmap);
i1=bitmap.toString();
Log.i("firstimage........",""+i1);
targetImage.setVisibility(0);
SQLiteDatabase db=database.getWritableDatabase();
db.execSQL("INSERT INTO UPLOAD VALUES('"+i1+"');");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
break;
}
}
}
Image.class:
public class Image extends Activity {
Database database=new Database(this);
static EfficientAdapter adapter, adapter1;
static ListView lv1;
static SQLiteDatabase db;
static EfficientAdapter adp;
static Cursor c1;
static Vector<String>IMAGE=new Vector<String>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
db=database.getReadableDatabase();
c1=db.rawQuery("select * from UPLOAD;", null);
if (c1.moveToFirst()) {
do {
IMAGE.add(c1.getString(0).toString());
} while (c1.moveToNext());
c1.close();
}
lv1=(ListView)findViewById(R.id.List);
adapter=new EfficientAdapter(this);
lv1.setAdapter(adapter);
ImageView add=(ImageView)findViewById(R.id.imv1a);
add.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
IMAGE.clear();
Intent i=new Intent(Image.this,Imageupload12.class);
startActivity(i);
}
});
}
private static class EfficientAdapter extends BaseAdapter{
// protected final Context Context = null;
protected LayoutInflater mLayoutInflater;
AlertDialog.Builder aBuilder;
public EfficientAdapter(Context context) {
// TODO Auto-generated constructor stub
mLayoutInflater=LayoutInflater.from(context);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return IMAGE.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
final ViewHolder mVHolder;
if(convertView == null){
convertView=mLayoutInflater.inflate(R.layout.pjtlistdetails, parent, false);
mVHolder=new ViewHolder();
mVHolder.t1=(TextView)convertView.findViewById(R.id.pjtdetails);
mVHolder.time=(TextView)convertView.findViewById(R.id.name);
mVHolder.imv=(ImageButton)convertView.findViewById(R.id.editic);
mVHolder.imvd=(ImageView)convertView.findViewById(R.id.delete);
mVHolder.imvf=(ImageView)convertView.findViewById(R.id.fwd);
mVHolder.imv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String img=IMAGE.elementAt(position);
Log.i("image...",""+img);
Context ctx=v.getContext();
Intent myIntent = new Intent();
ctx = v.getContext();
myIntent.setClass(ctx, Imageupload12.class);
myIntent.putExtra("image", img);
ctx.startActivity(myIntent);
IMAGE.clear();
}
});
static class ViewHolder{
ImageButton imv;
ImageView imvd,imvf;
}
解决方案
you have to use "blob" to store image.
ex: to store a image in to db
public void insertImg(int id , Bitmap img ) {
byte[] data = getBitmapAsByteArray(img); // this is a function
insertStatement_logo.bindLong(1, id);
insertStatement_logo.bindBlob(2, data);
insertStatement_logo.executeInsert();
insertStatement_logo.clearBindings() ;
}
public static byte[] getBitmapAsByteArray(Bitmap bitmap) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.PNG, 0, outputStream);
return outputStream.toByteArray();
}
to retrieve a image from db
public Bitmap getImage(int i){
String qu = "select img from table where feedid=" + i ;
Cursor cur = db.rawQuery(qu, null);
if (cur.moveToFirst()){
byte[] imgByte = cur.getBlob(0);
cur.close();
return BitmapFactory.decodeByteArray(imgByte, 0, imgByte.length);
}
if (cur != null && !cur.isClosed()) {
cur.close();
}
return null ;
}
这篇关于如何存储图像SQLite数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文