Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
klim76
20 / 14 / 2
Регистрация: 10.06.2016
Сообщений: 144
1

Java.lang.OutOfMemoryError

12.09.2016, 00:18. Просмотров 432. Ответов 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
Здравствуйте. В приложении частенько выскакивает ошибки...

Java.lang.OutOfMemoryError на Samsung Galaxy
Play Google в разделе Сбой показывает ошибку java.lang.OutOfMemoryError. С ней...

Ava.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String[] link.stuzer.stattrack.data
// Print out the database as array public String getAllWeapons(){ ...

Ошибка java.lang.ClassCastException: com.organizer.ToDoItemDescr cannot be cast to java.util.Map
Ошибка появляется когда пытаюсь вытянуть из кастомного адаптера запись...

java.lang.NoClassDefFoundError
Не пойму, что не так. DataActivity.java находится в пакете com.example.helper,...

6
Lumber
295 / 100 / 41
Регистрация: 02.12.2015
Сообщений: 241
12.09.2016, 00:43 2
Значит фотки большие, их надо уменьшать до необходимого размера (до размера в каком они будут на экране показываться). JPG декодируется и они в памяти занимают намного больше места. 3 (или 4?) байта на пиксель.
0
klim76
20 / 14 / 2
Регистрация: 10.06.2016
Сообщений: 144
12.09.2016, 00:48  [ТС] 3
Lumber, Ну да, фоты с камеры нащелканные. Подскажите как их "ужать" в размере?
0
Mikalai
264 / 240 / 95
Регистрация: 11.01.2015
Сообщений: 671
12.09.2016, 00:52 4
klim76, вот тут почитай.
1
Lumber
295 / 100 / 41
Регистрация: 02.12.2015
Сообщений: 241
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
Сообщений: 144
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
2732 / 2167 / 735
Регистрация: 12.05.2014
Сообщений: 7,586
Завершенные тесты: 1
12.09.2016, 10:41 7
Цитата Сообщение от klim76 Посмотреть сообщение
или в коде тоже как то можно "60dp" задать
Java
1
int w = getResources().getDimensionPixelSize(R.dimen.ololo_width);
1
12.09.2016, 10:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2016, 10:41

Java.lang.ClassNotFoundException
Сам класс MainActivity обьявлен то есть создан. Но почему-то вываливает ошибки...

Java.lang.ClasscastException
Пишу на андроид, но не суть. Есть один класс, наследующий от application,...

Ошибка java.lang.NullPointerException
Помогите решать проблему. ошибку на этом строке указывает selected =...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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