如何存储图像SQLite数据库

编程入门 行业动态 更新时间:2024-10-25 04:17:28
本文介绍了如何存储图像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 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(); bitmappress(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数据库

本文发布于:2023-10-07 10:38:30,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1469163.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:图像   数据库   SQLite

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!