我从SD卡获取图像并在imageview上显示它现在我想在数据库中插入此图像但它没有存储在db中

时间:2012-07-04 11:07:31

标签: android database image insert

我正在为客户创建一个应用程序来存储他们的图像和细节。我正在通过相机或SD卡浏览图像。我通过sdcard在ImageView中获取图像,但是当我将其插入数据库时​​,它不会插入数据库中的image列。

我点击SD卡按钮浏览图像。现在,此图片显示在ImageView

Button btnsdcard = (Button) findViewById(R.id.custbtnimage);
    btnsdcard.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent i = new Intent(
                    Intent.ACTION_PICK,
                    android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
            startActivityForResult(i, ACTIVITY_SELECT_IMAGE);
        }
    });

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
    case 1:
        if (resultCode == RESULT_OK) {
            Uri selectedImage = data.getData();
            try {
                InputStream imgstream = getContentResolver()
                        .openInputStream(selectedImage);
                Bitmap btm = BitmapFactory.decodeStream(imgstream);
                ImageView img = (ImageView) findViewById(R.id.imagecust);
                img.setImageBitmap(btm);
                ByteArrayOutputStream bo = new ByteArrayOutputStream();
                btm.compress(Bitmap.CompressFormat.PNG, 100, bo);
                byte[] custimage = bo.toByteArray();
            } catch (FileNotFoundException e) {                 
                e.printStackTrace();
                Toast.makeText(getBaseContext(), "file not fount",
                        Toast.LENGTH_SHORT).show();
            }
    }   }
    }

现在,当我点击数据库中的保存按钮othewr数据存储但数据库中的图像列为空时,我没有收到任何错误。

    btnsave.setOnClickListener(new OnClickListener() {

        @SuppressLint("ParserError")
        public void onClick(View v) {
            // TODO Auto-generated method stub
            String name = custname.getText().toString();
            String address = custaddress.getText().toString();
            Long pincode = Long.parseLong(custpincode.getText().toString());
        String city = custcity.getText().toString();


            byte[] image=custimage;

            Customerprofile profile = new Customerprofile();
            profile.setName(name);
            profile.setAddress(address);
            profile.setPincode(pincode);
            profile.setCity(city);
            profile.setImage(image);

            insertcust(profile);
                        }

        private void insertcust(Customerprofile profile) {
            // TODO Auto-generated method stub
            DatabaseHelper mydbhelper = new DatabaseHelper(Myimage.this);
            SQLiteDatabase db = mydbhelper.getWritableDatabase();
            ContentValues values = new ContentValues();
            values.put(DatabaseHelper.KEY_NAME, profile.getName());
            values.put(DatabaseHelper.KEY_ADDRESS, profile.getAddress());
            values.put(DatabaseHelper.KEY_PINCODE, profile.getPincode());
            values.put(DatabaseHelper.KEY_CITY, profile.getCity());
            values.put(DatabaseHelper.KEY_IMAGE, profile.getImage());

            long adcid = db.insert(DatabaseHelper.DATABASE_TABLE, null,
                    values);

            db.close();


        }
    });
}

任何人都可以帮我解决将ImageView图像存储在数据库中的问题。

1 个答案:

答案 0 :(得分:0)

您确实应该将图像存储在除DB之外的其他位置,然后将路径放在数据库中。

如果你真的想把它放在数据库中,你需要创建一个BLOB类型的列来存储它(我提到这个,因为你没有显示你的数据库结构)。

然后,您需要将图像转换为字节数组,然后将其保存到数据库中。仔细查看您的代码,看起来您正在做所有这些...

找到你的问题。您正在使用局部变量,然后尝试在其范围之外引用它们。您的byte[] custimage = bo.toByteArray();中有onActivityResult,但当byte[] image=custimage;超出范围时,请尝试在onClick中使用custimage

byte[] custimage;声明为类字段,以便所有方法都可以访问onActivityResult,将custimage = bo.toByteArray();中的出现更改为{{1}},它应该开始工作。