如何存储图像SQLite数据库 [英] how to store image in sqlite database

查看:124
本文介绍了如何存储图像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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆