存储在SQLite数据库中的图像的URI

时间:2012-03-26 07:03:42

标签: android android-contentprovider

图像存储在我的SQLite数据库中,我需要将用户选择的图像附加到电子邮件/ mms应用程序。但是这样的应用程序只能通过URI格式(Intent.EXTRA_STREAM)接受图像,而不是直接接受字节数组/图像本身。

所以现在我需要一个存储在SQLite数据库中的图像URI。我怎样才能找回它? 或者我是否需要为其编写自定义内容提供程序?

2 个答案:

答案 0 :(得分:0)

听起来像你需要编写自己的内容提供者,正如你所提到的 - 没有一个,操作系统无法将数据库与URI关联

答案 1 :(得分:0)

此代码适合我。你可以得到适当的解决方案

 Uri selectedImage = data.getData();
         ImageView imageView=(ImageView)this.findViewById(R.id.imageView1);

        getContentResolver().notifyChange(selectedImage, null);

        ContentResolver cr = getContentResolver();
        Bitmap bitmap;
        try {


            bitmap = android.provider.MediaStore.Images.Media
             .getBitmap(cr, selectedImage);
            imageView.setImageBitmap(bitmap);

            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
            byte[] b = baos.toByteArray();
            String encodedImageString = Base64.encodeToString(b, Base64.DEFAULT);

            byte[] bytarray = Base64.decode(encodedImageString, Base64.DEFAULT);
            Bitmap bmimage = BitmapFactory.decodeByteArray(bytarray, 0,
                    bytarray.length);

            myDb.execSQL("INSERT INTO imgtbl VALUES('"+encodedImageString+"');");
            Cursor c= myDb.rawQuery("SELECT * FROM imgtbl", null);

           c.moveToFirst();
           String img=c.getString(0);
           byte[] byarray = Base64.decode(img, Base64.DEFAULT);
           Bitmap bmimg = BitmapFactory.decodeByteArray(byarray, 0,
                   byarray.length);

            ImageView iv=(ImageView)findViewById(R.id.img2);
            ImageView iv1=(ImageView)findViewById(R.id.img3);

            iv.setImageBitmap(bmimg);
            iv1.setImageBitmap(bmimg);


        } catch (Exception e) {
            Toast.makeText(this, "Failed to load", Toast.LENGTH_SHORT)
                    .show();

            e.printStackTrace();
        }