URI изображения, хранящегося в базе данных SQLite - PullRequest
0 голосов
/ 26 марта 2012

Изображения хранятся в моей базе данных SQLite, мне нужно прикрепить изображение по выбору пользователя к приложению электронной почты / ммс. Но такое приложение принимает изображение только через формат URI (Intent.EXTRA_STREAM), а не непосредственно байтовый массив / само изображение.

Так что теперь мне нужен URI изображения, хранящегося в базе данных SQLite. Как я могу получить это? Или мне нужно написать свой собственный контент-провайдер для этого?

Ответы [ 2 ]

0 голосов
/ 01 августа 2015

Этот код для меня. вы можете получить правильное решение

 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();
        }
0 голосов
/ 29 марта 2012

Похоже, вам нужно написать собственного поставщика контента, как вы упомянули - без такового ОС не сможет связать вашу базу данных с URI

...