Я получил эту дурацкую проблему памяти, когда я направляю кодированного Растр в другой класс:Bitmap не будет sented по SharedPreferences: Не удалось выделить память
java.lang.OutOfMemoryError: Failed to allocate a 5280012 byte allocation with 3645732 free bytes and 3MB until OOM
(Он работал и раньше, но я не знаю, что не так с ним теперь)
Вот мой класс отправитель:
public void ProfilePic(View view) {
Intent i = new Intent(Intent.ACTION_PICK , MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i , SELECTED_IMAGE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode){
case SELECTED_IMAGE:
if (resultCode==RESULT_OK){
Uri uri=data.getData();
String[]projection = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(uri , projection , null , null , null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(projection[0]);
String filePath=cursor.getString(columnIndex);
cursor.close();
yourImage = BitmapFactory.decodeFile(filePath);
ProfilePic = new BitmapDrawable(yourImage);
imageView.setImageDrawable(ProfilePic);
}
break;
}
}
public static String encodeTobase64(Bitmap yourImage) {
Bitmap immage = yourImage;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
immage.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] b = baos.toByteArray();
String imageEncoded = Base64.encodeToString(b, Base64.DEFAULT);
Log.d("Image Log:", imageEncoded);
return imageEncoded;
}
public void next2(View view) {
if(yourImage != null) {
SharedPreferences prefs = this.getSharedPreferences(
"PP", Context.MODE_PRIVATE);
SharedPreferences.Editor edit = prefs.edit();
edit.putString("PP", encodeTobase64(yourImage));
edit.commit();
}
else {
SharedPreferences prefs = this.getSharedPreferences(
"PP", Context.MODE_PRIVATE);
SharedPreferences.Editor edit = prefs.edit();
edit.putString("PP", "0");
edit.commit();
}
SharedPreferences p = this.getSharedPreferences(
"home_button", Context.MODE_PRIVATE);
SharedPreferences.Editor e = p.edit();
e.putBoolean("fr", true);
e.commit();
Intent i = new Intent(this , Results.class);
startActivity(i);
}
App сбой при входе в "Результаты"-активности.
Но, когда я закрыть приложение и вернуться снова, он идет прямо в конечные результаты деятельности и все выглядит нормально (sented картина успешно sented) ...
Что вызывает Эта проблема?
просто вы из памяти, изображение требуется около 5 МБ и ваше приложение имеет только 3MB –
есть быстрый способ для оптимизации изображения в коде ??? – PersonalHealth
Проверьте правильность ширины и высоты изображения. Ограничьте пользователя, используя слишком большой файл. –