本文介绍了如何存储图像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数据库
发布评论