Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
klim76
20 / 14 / 2
Регистрация: 10.06.2016
Сообщений: 137
#1

Java.lang.OutOfMemoryError - Программирование Android

12.09.2016, 00:18. Просмотров 300. Ответов 6
Метки нет (Все метки)

Помогите, падает приложение с ошибкой нехватки памяти. Делаю добавление фото из галереи телефона, и на 4-5м снимке приложение падает.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
FATAL EXCEPTION: main
                                                                              Theme: themes:{}
                                                                              java.lang.OutOfMemoryError: Failed to allocate a 20155404 byte allocation with 620080 free bytes and 605KB 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 erpico.mobile.android.bus4us.Fragments.FeedbackFragmen.onActivityResult(FeedbackFragmen.java:94)
                                                                                  at android.app.Activity.dispatchActivityResult(Activity.java:6480)
                                                                                  at android.app.ActivityThread.deliverResults(ActivityThread.java:3729)
                                                                                  at android.app.ActivityThread.handleSendResult(ActivityThread.java:3776)
                                                                                  at android.app.ActivityThread.-wrap16(ActivityThread.java)
                                                                                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1412)
                                                                                  at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                  at android.os.Looper.loop(Looper.java:148)
                                                                                  at android.app.ActivityThread.main(ActivityThread.java:5461)
                                                                                  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)
Собственно выбор и добавление картинки во фрагмент:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch(requestCode) {
            case 100:
                if(resultCode == Activity.RESULT_OK){
                    Uri selectedImage = data.getData();
                    InputStream imageStream = null;
                    try {
                        imageStream = getActivity().getContentResolver().openInputStream(selectedImage);
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    }
                    Bitmap SelectedImage = BitmapFactory.decodeStream(imageStream);
                    SetNewImage(SelectedImage);
                }
                break;
        }
    }
 
    private void SetNewImage(Bitmap b){
        if(b == null)
            return;
 
        int countImages = llImageHost.getChildCount();
        View tmpView = llImageHost.getChildAt(countImages-1);
 
        llImageHost.removeViewAt(countImages-1);
        ImageView addedView = new ImageView(getActivity());
        addedView.setImageBitmap(b);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(60,60);
        params.setMargins(5,5,5,5);
        addedView.setLayoutParams(params);
        llImageHost.addView(addedView);
        llImageHost.addView(tmpView);
    }
Решение написано "влоб", Подскажите как исправить
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.09.2016, 00:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Java.lang.OutOfMemoryError (Программирование Android):

Ошибка java.lang.OutOfMemoryError - Программирование Android
Здравствуйте. В приложении частенько выскакивает ошибки java.lang.OutOfMemoryError BitmapFactory.nativeDecodeAsset() и...

Java.lang.OutOfMemoryError на Samsung Galaxy - Программирование Android
Play Google в разделе Сбой показывает ошибку java.lang.OutOfMemoryError. С ней более-менее все понятно. Но по чему она вылетает...

Ava.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String[] link.stuzer.stattrack.data - Программирование Android
// Print out the database as array public String getAllWeapons(){ String dbString = new String; SQLiteDatabase...

Ошибка java.lang.ClassCastException: com.organizer.ToDoItemDescr cannot be cast to java.util.Map - Программирование Android
Ошибка появляется когда пытаюсь вытянуть из кастомного адаптера запись ListView. Весь лог ошибки такой: FATAL EXCEPTION: main Process:...

Java.lang.ClasscastException - Программирование Android
Пишу на андроид, но не суть. Есть один класс, наследующий от application, например MyApp. В MainActivity (главном рабочем, стартовом классе...

java.lang.NoClassDefFoundError - Программирование Android
Не пойму, что не так. DataActivity.java находится в пакете com.example.helper, в манифесте прописано: <activity...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Lumber
99 / 99 / 37
Регистрация: 02.12.2015
Сообщений: 239
12.09.2016, 00:43 #2
Значит фотки большие, их надо уменьшать до необходимого размера (до размера в каком они будут на экране показываться). JPG декодируется и они в памяти занимают намного больше места. 3 (или 4?) байта на пиксель.
0
klim76
20 / 14 / 2
Регистрация: 10.06.2016
Сообщений: 137
12.09.2016, 00:48  [ТС] #3
Lumber, Ну да, фоты с камеры нащелканные. Подскажите как их "ужать" в размере?
0
Mikalai
256 / 232 / 93
Регистрация: 11.01.2015
Сообщений: 655
12.09.2016, 00:52 #4
klim76, вот тут почитай.
1
Lumber
99 / 99 / 37
Регистрация: 02.12.2015
Сообщений: 239
12.09.2016, 00:54 #5
для декодирования использовать вот этот метод:

decodeStream(InputStream is, Rect outPadding, BitmapFactory.Options opts)

в BitmapFactory.Options можно задать размер (outHeight, outWidth).
1
klim76
20 / 14 / 2
Регистрация: 10.06.2016
Сообщений: 137
12.09.2016, 10:34  [ТС] #6
Еще вопрос в догонку. В разметке под превью картинки предусмотрен ImageView с шириной и длиной "60dp"
а в коде я делаю -
Java
1
2
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(60,60);
        params.setMargins(5,5,5,5);
т.е. размер жестко в пикселях. Это нормально будет работать или в коде тоже как то можно "60dp" задать?
0
Pablito
2493 / 1938 / 605
Регистрация: 12.05.2014
Сообщений: 6,798
Завершенные тесты: 1
12.09.2016, 10:41 #7
Цитата Сообщение от klim76 Посмотреть сообщение
или в коде тоже как то можно "60dp" задать
Java
1
int w = getResources().getDimensionPixelSize(R.dimen.ololo_width);
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2016, 10:41
Привет! Вот еще темы с ответами:

Ошибка java.lang.NullPointerException - Программирование Android
Возникает ошибка при объявлении строкового массива, я проверил, в файле string все данные есть Лог ошибки: 07-31 15:25:38.258...

Java.lang.IncompatibleClassChangeError и лямбда - Программирование Android
Приветствую. Есть обработчик события нажатия кнопки, при тестировании приложения, нажимал ее тысячу раз и вот с со следующего нажатия...

Java.lang.NumberFormatException: Invalid double - Программирование Android
Android приложение, в котором нужно построить график. Для этого я получаю с помощью AsyncTask(парсинг XML) значения типа String, но мне их...

FATAL EXCEPTION: main java.lang.NullPointerException - Программирование Android
Помогите есть исходный код package com.br.br; import android.content.Intent; import android.graphics.Bitmap; import...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
12.09.2016, 10:41
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru