我遇到了奇怪的问题,我有一个用户点击按钮来选择图像。然后我将编码的路径存储在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();
}
}
为什么找不到文件,尽管那是我第一次得到的编码路径?
答案 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);
}