Я пытаюсь загрузить изображение из большой галереи (около 30 МБ-70 МБ). Проблема, которую я держать облицовкой:Crash OutOfMemoryError при попытке загрузить большое изображение из галереи
FATAL EXCEPTION: main Process: com.parse.starter, PID: 29795
java.lang.OutOfMemoryError: Failed to allocate a 1866240012 byte allocation with 2323392 free bytes and 380MB until OOM at dalvik.system.VMRuntime.newNonMovableArray(Native Method) at android.graphics.BitmapFactory.nativeDecodeStream(Native Method) at android.graphics.BitmapFactory.decodeStreamInternal(BitmapFactory.java:635) at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:611) at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:649) at android.provider.MediaStore$Images$Media.getBitmap(MediaStore.java:867) at com.parse.starter.AddPhotosActivity.onActivityResult(AddPhotosActivity.java:151) at android.app.Activity.dispatchActivityResult(Activity.java:6428) at android.app.ActivityThread.deliverResults(ActivityThread.java:3695) at android.app.ActivityThread.handleSendResult(ActivityThread.java:3742) at android.app.ActivityThread.-wrap16(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Вот мой код (строка 151, как указано выше, в журнале аварии) имеет комментарий прямо над ним. В принципе, конечной целью является то, что я хочу сразу определить, имеет ли выбранное изображение больше 10 МБ. Если это так, то отправьте тост, если нет, затем приступайте к сохранению изображения на бэкэнд.
if (requestCode == SELECT_PHOTO && resultCode == RESULT_OK)
{
Uri uri = data.getData();
File f = new File(uri.getPath());
try
{
// LINE BELOW IS THE LINE 151, ERROR CRASH
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
if (bitmap.getByteCount() > 10485760)
{
Toast.makeText(AddPhotosActivity.this, "That file is too large to attach to a Grievance, please try again!", Toast.LENGTH_SHORT).show();
}
else
{
mImageOne.setImageBitmap(bitmap);
SaveImageOne(bitmap);
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = 2; Bitmap bm = BitmapFactory.decodeFile (picPath, опции); попробуйте это – Nisarg
Смотрите это: https://developer.android.com/training/displaying-bitmaps/load-bitmap.html – marcinj
Пожалуйста, найдите свое исключение в следующий раз, есть много вопросов, связанных с этим – tyczj