Не удалось выделить память для загрузки файлов jpg - Android-студия Erro - PullRequest
0 голосов
/ 30 сентября 2018

В моем приложении есть функция, которая добавляет автономные изображения, которые хранятся в памяти приложения, в просмотр списка.Код очень прост, как вы можете видеть:

if(FirstTag != null) {
        if (FirstTag.equals("care"))
            imageView.setImageDrawable(context.getApplicationContext().getResources().getDrawable(R.drawable.care));
        else if (FirstTag.equals("holidays"))
            imageView.setImageDrawable(context.getApplicationContext().getResources().getDrawable(R.drawable.holidays));
        else if (FirstTag.equals("Thing Different"))
            imageView.setImageDrawable(context.getApplicationContext().getResources().getDrawable(R.drawable.thinkdifferent2));
        else if (FirstTag.equals("Fun Activities"))
            imageView.setImageDrawable(context.getApplicationContext().getResources().getDrawable(R.drawable.fun));
        else if (FirstTag.equals("מערך חברות")) }

он просто проверяет значение в объекте json и помещает картинку в представление списка по этому значению, конечно, есть 20 значений, а не 5, ноЯ не думал, что должен включать все ... Все картинки сжаты, и когда я не загружаю многие из них, приложение не падает.Но когда я пытаюсь запустить приложение с изображением для каждого элемента в просмотре списка, кажется, что все работает идеально, а затем, когда вы прокручиваете приложение, оно отстает и через секунду оно вылетает со следующей ошибкой:

9-30 18: 35: 18.299 7859-7859 / com.example.negev.peulibraryv201 E / AndroidRuntime: FATAL EXCEPTION: main Процесс: com.example.negev.peulibraryv201, PID: 7859 java.lang.OutOfMemoryError:Не удалось выделить 681099532 байта с 16777216 свободными байтами и 261 МБ до OOM в dalvik.system.VMRuntime.newNonMovableArray (собственный метод) в android.graphics.BitmapFactory.nativeDecodeAsset (собственный метод) в android.graphics.BitmapStreamFactory.Java: 700) в android.graphics.BitmapFactory.decodeResourceStream (BitmapFactory.java:535) в android.graphics.drawable.Drawable.createFromResourceStream (Drawable.java:1179) в android.content.res.ResourcesImpl.loadDrawableForCookie (: 770) на android.content.res.ResourcesImpl.loadDrawable (ResourcesImpl.java:621) на android.content.res.Resources.getDrawable (Resources.java:1640) на android.content.res.Resources.getDrawable (Resources.java:1611) на com.example.negev.peulibraryv201.GamesLibraryAdapter.getView (GamesLibraryAdapter.java:70) в android.widget.AbsListView.obtainView (AbsListView.java:3238) в android.widget.ListView.makeAndAddView (ListView.java:2147) в android.widget.ListViewListView.java:767) в android.widget.ListView.fillGap (ListView.java:731) в android.widget.AbsListView.trackMotionScroll (AbsListView.java:8292) в android.widget.ListView.trackMotionScroll (ListView.java:2065) в android.widget.AbsListView $ FlingRunnable.run (AbsListView.java:7719) в android.view.Choreographer $ CallbackRecord.run (Choreographer.java:927)на android.view.Choreographer.doCallbacks (Choreographer.java:702) на android.view.Choreographer.doFrame (Choreographer.java:635) на android.view.Choreographer $ FrameDisplayEventReceiver.run (хореограф13.java: 9: andre:.os.Handler.handleCallback (Handler.java:751) на android.os.Handler.dispatchMessage (Handler.java:95) на android.os.Looper.loop (Looper.java:154) на android.app.ActivityThread.main(ActivityThread.java:6682) на java.lang.reflect.Method.invoke (собственный метод) на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1520) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1410)

Я уже добавил эти строки в свой манифест:

android:hardwareAccelerated="false"
    android:largeHeap="true"

, и это не сработало, как вы думаете, ясможет сделать?Спасибо!

1 Ответ

0 голосов
/ 30 сентября 2018

Что вам нужно сделать, это загрузить данные динамически, когда они станут видны на экране.Так как это тяжелая работа, Google уже сделал это для вас.Вам нужно использовать ArrayAdapter с представлением списка и позволить Andriod запросить у вас дополнительные данные, когда они понадобятся.Слишком много кода для подробного объяснения, но посмотрите на это видео ввода / вывода Goolge .В Интернете есть много учебных пособий, в которых подробно объясняется, как это сделать.Посмотрите здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...