获取图像到编码路径设置图像不起作用?

时间:2012-09-14 05:55:09

标签: android

我遇到了奇怪的问题,我有一个用户点击按钮来选择图像。然后我将编码的路径存储在db中并稍后进行检索,以便在另一个活动中显示该图像,但是我得到以下异常

09-14 01:39:36.195: W/System.err(2241): java.io.FileNotFoundException: No content provider: /external/images/media/1113
09-14 01:39:36.195: W/System.err(2241):     at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:610)
09-14 01:39:36.195: W/System.err(2241):     at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:542)
09-14 01:39:36.195: W/System.err(2241):     at android.content.ContentResolver.openInputStream(ContentResolver.java:377)

我的按钮OnClick&存储在db代码中:

                Uri selectedImage = imageReturnedIntent.getData();
                InputStream imageStream;
                try {
                    imageStream = getContentResolver().openInputStream(selectedImage);
                    BitmapFactory.Options options=new BitmapFactory.Options();
                    options.inSampleSize = 8;
                    Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream, null, options );
                    ivPictureChosen.setImageBitmap(yourSelectedImage);
                    storeEncodedImageInDb(selectedImage.getEncodedPath());
                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    Toast.makeText(this, "Couldn't pick image", Toast.LENGTH_SHORT).show();
                }

我的转发&显示图片代码:

            String imagePath = db.getEncodedImage();
            if(imagePath.length()>0){
                Uri mainImgeUri = Uri.parse(imagePath);
                InputStream imageStream;
                try {
                    imageStream = getContentResolver().openInputStream(mainImgeUri);
                    BitmapFactory.Options options=new BitmapFactory.Options();
                    options.inSampleSize = 8;
                    Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream, null, options );
                    mainImage.setImageBitmap(yourSelectedImage);
                } catch (FileNotFoundException e) {

                    e.printStackTrace();
                }
            }

为什么找不到文件,尽管那是我第一次得到的编码路径?

2 个答案:

答案 0 :(得分:0)

您不仅需要路径,还需要方案等。 Uri看起来像这样:http://www.stackoverflow.com或文件://foo/bar/image.jpg。

encodedPath只是其中的路径部分,例如stackoverflow.com或/foo/bar/image.jpg。

尝试将yourUri.toString()的结果存储在数据库中并检索Uri.parse(theStringFromDatabase)

答案 1 :(得分:0)

这是将其编码并解码为base64 string并从base64 string返回的方式,请查看。

public static String encodeTobase64(String Path)
{
    Bitmap immagex=Bitmap.createScaledBitmap(BitmapFactory.decodeFile(Path), 140, 120, false);    
    ByteArrayOutputStream baos = new ByteArrayOutputStream();  
    immagex.compress(Bitmap.CompressFormat.JPEG, 75, baos);
    byte[] b = baos.toByteArray();
    String imageEncoded = Base64.encodeToString(b,Base64.DEFAULT);

    Log.e("LOOK", imageEncoded);
    return imageEncoded;
}
public static Bitmap decodeBase64(String input) 
{
    byte[] decodedByte = Base64.decode(input, 0);
    return BitmapFactory.decodeByteArray(decodedByte, 0, decodedByte.length); 
}