我使用以下方法来防止outofmemory异常,但Bitmap始终为null。有人有想法吗?
public Bitmap readBitmap(Android.Net.Uri selectedImage) {
Bitmap bm = null;
BitmapFactory.Options options = new BitmapFactory.Options();
options.InSampleSize = 9;
AssetFileDescriptor fileDescriptor = null;
try {
fileDescriptor = this.ContentResolver.OpenAssetFileDescriptor(selectedImage,"r");
} catch (FileNotFoundException e) {
Toast.MakeText(this, e.Message, ToastLength.Long);
}
finally{
try {
bm = BitmapFactory.DecodeFileDescriptor(fileDescriptor.FileDescriptor, null, options);
fileDescriptor.Close();
} catch (IOException) {
}
}
return bm;
}
答案 0 :(得分:1)
是。这是谷歌的另一个错误。解决方案是这样做:
bm = BitmapFactory.decodeStream(new FileInputStream(fileDescriptor));
而不是
bm = BitmapFactory.DecodeFileDescriptor(fileDescriptor.FileDescriptor, null, options);
答案 1 :(得分:0)
BitmapFactory.DecodeFileDescriptor
必须抛出异常。
答案 2 :(得分:0)
在你的捕获中,尝试像这样修改
} catch (IOException e) {
Log.v ("Message", ""+e.message);
}
所以你可以看到它返回null的错误
答案 3 :(得分:0)
也许Uri不正确并且FileNotFoundException
被抛出。但是您无法看到这一点,因为您在catch子句中缺少Toast的show()
方法。
应该是这样的:
Toast.MakeText(this, e.Message, ToastLength.Long).show();