i am picking images on my app with android, and i dont know why, sometimes i got an exception, i think it's allways i select a image with more than 400 or 500 kb's but i am not sure. Why? because when i select small images of 100 kb i dont get the exception, and when i get images with high KB or MB, it crash WITH java.lang.OutOfMemoryError: bitmap size exceeds VM budget
. BUT VERY IMPORTANT: it crashes on the emulator but ALSO CRASH ON MY PHONE, is not a failure of the emulator.
this is my code:
changeImageButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent i = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI);
startActivityForResult(i, ACTIVITY_SELECT_IMAGE);
}
});
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
switch(requestCode) {
case 1:
{
setResult(1);
finish();
}
case ACTIVITY_SELECT_IMAGE:
if(resultCode == RESULT_OK){
Uri selectedImage = imageReturnedIntent.getData();
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String filePath = cursor.getString(columnIndex);
cursor.close();
selectedPhoto = BitmapFactory.decodeFile(filePath);
//profileImage.setImageBitmap(selectedPhoto);
profileImage.setImageBitmap(Bitmap.createScaledBitmap(selectedPhoto, 80, 80, false));
}
}
}
profileImage is a ImageView of my layout. and i use scaled butmap to resice the image to 80x80
please give me some help with this exception, i need to solve it
this is the exception:
01-31 12:38:37.531: ERROR/AndroidRuntime(1025): Uncaught handler: thread main exiting due to uncaught exception
01-31 12:38:37.552: ERROR/AndroidRuntime(1025): java.lang.OutOfMemoryError: bitmap size exceeds VM budget
01-31 12:38:37.552: ERROR/AndroidRuntime(1025): at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
01-31 12:38:37.552: ERROR/AndroidRuntime(1025): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:375)
01-31 12:38:37.552: ERROR/AndroidRuntime(1025): at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:171)
01-31 12:38:37.552: ERROR/AndroidRuntime(1025): at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:196)
01-31 12:38:37.552: ERROR/AndroidRuntime(1025): at com.GPSLoc.Configuration.onActivityResult(Configuration.java:253)
01-31 12:38:37.552: ERROR/AndroidRuntime(1025): at android.app.Activity.dispatchActivityResult(Activity.java:3595)
01-31 12:38:37.552: ERROR/AndroidRuntime(1025): at android.app.ActivityThread.deliverResults(ActivityThread.java:3001)
01-31 12:38:37.552: ERROR/AndroidRuntime(1025): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3047)
01-31 12:38:37.552: ERROR/AndroidRuntime(1025): at android.app.ActivityThread.access$2300(ActivityThread.java:112)
01-31 12:38:37.552: ERROR/AndroidRuntime(1025): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1721)
01-31 12:38:37.552: ERROR/AndroidRuntime(1025): at android.os.Handler.dispatchMessage(Handler.java:99)
01-31 12:38:37.552: ERROR/AndroidRuntime(1025): at android.os.Looper.loop(Looper.java:123)
01-31 12:38:37.552: ERROR/AndroidRuntime(1025): at android.app.ActivityThread.main(ActivityThread.java:3948)
01-31 12:38:37.552: ERROR/AndroidRuntime(1025): at java.lang.reflect.Method.invokeNative(Native Method)
01-31 12:38:37.552: ERROR/AndroidRuntime(1025): at java.lang.reflect.Method.invoke(Method.java:521)
01-31 12:38:37.552: ERROR/AndroidRuntime(1025): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
01-31 12:38:37.552: ERROR/AndroidRuntime(1025): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
01-31 12:38:37.552: ERROR/AndroidRuntime(1025): at dalvik.system.NativeStart.main(Native Method)