7

In my app for Android I'm using Volley for loading images in custom listview.

when i refresh(delete all items and load tiems) listview many times, my app is killed with this message

how can i fix it?

04-26 13:08:01.038: E/dalvikvm-heap(18040): Out of memory on a 1684947261-byte allocation. 04-26 13:08:01.038: I/dalvikvm(18040): "Thread-11094" prio=5 tid=299 RUNNABLE 04-26 13:08:01.038: I/dalvikvm(18040): | group="main" sCount=0 dsCount=0 obj=0x439ea8e8 self=0x7fb55250 04-26 13:08:01.038: I/dalvikvm(18040): | sysTid=18946 nice=10 sched=0/0 cgrp=apps/bg_non_interactive handle=2102160344 04-26 13:08:01.038: I/dalvikvm(18040): | state=R schedstat=( 109248225 27367764 57 ) utm=9 stm=1 core=2 04-26 13:08:01.038: I/dalvikvm(18040): at com.android.volley.toolbox.DiskBasedCache.streamToBytes(DiskBasedCache.java:~316) 04-26 13:08:01.038: I/dalvikvm(18040): at com.android.volley.toolbox.DiskBasedCache.readString(DiskBasedCache.java:526) 04-26 13:08:01.038: I/dalvikvm(18040): at com.android.volley.toolbox.DiskBasedCache.readStringStringMap(DiskBasedCache.java:549) 04-26 13:08:01.038: I/dalvikvm(18040): at com.android.volley.toolbox.DiskBasedCache$CacheHeader.readHeader(DiskBasedCache.java:392) 04-26 13:08:01.038: I/dalvikvm(18040): at com.android.volley.toolbox.DiskBasedCache.initialize(DiskBasedCache.java:155) 04-26 13:08:01.038: I/dalvikvm(18040): at com.android.volley.CacheDispatcher.run(CacheDispatcher.java:84) 04-26 13:08:01.048: W/dalvikvm(18040): threadid=299: thread exiting with uncaught exception (group=0x41745da0) 04-26 13:08:01.048: I/SpenGestureManager(847): setFocusWindow0 04-26 13:08:01.048: D/PointerIcon(847): setHoveringSpenIconStyle1 pointerType: 10001iconType:1 flag:0 04-26 13:08:01.048: D/PointerIcon(847): setHoveringSpenCustomIcon IconType is same.1 04-26 13:08:01.048: E/AndroidRuntime(18040): FATAL EXCEPTION: Thread-11094 04-26 13:08:01.048: E/AndroidRuntime(18040): Process: com.android.myapp, PID: 18040 04-26 13:08:01.048: E/AndroidRuntime(18040): java.lang.OutOfMemoryError 04-26 13:08:01.048: E/AndroidRuntime(18040): at com.android.volley.toolbox.DiskBasedCache.streamToBytes(DiskBasedCache.java:316) 04-26 13:08:01.048: E/AndroidRuntime(18040): at com.android.volley.toolbox.DiskBasedCache.readString(DiskBasedCache.java:526) 04-26 13:08:01.048: E/AndroidRuntime(18040): at com.android.volley.toolbox.DiskBasedCache.readStringStringMap(DiskBasedCache.java:549) 04-26 13:08:01.048: E/AndroidRuntime(18040): at com.android.volley.toolbox.DiskBasedCache$CacheHeader.readHeader(DiskBasedCache.java:392) 04-26 13:08:01.048: E/AndroidRuntime(18040): at com.android.volley.toolbox.DiskBasedCache.initialize(DiskBasedCache.java:155) 04-26 13:08:01.048: E/AndroidRuntime(18040): at com.android.volley.CacheDispatcher.run(CacheDispatcher.java:84) 04-26 13:08:01.058: W/ActivityManager(847): Force finishing activity com.android.myapp/.feedlist.Feedlist

user3546708
  • 71
  • 2
  • 2
  • any solution to this? – CQM Jun 12 '14 at 17:52
  • 1
    This question is almost 2 years old but I am still searching for a solution to it. [This question](https://stackoverflow.com/questions/24095909/volley-out-of-memory-error-weird-allocation-attempt/24422376#comment54546831_24422376) is similar but the answer does not work for me. OP did you ever figure it out? – yuval Feb 18 '16 at 20:04

2 Answers2

1

Have you tried

RequestQueue volleyQueue = Volley.newRequestQueue(this);
DiskBasedCache cache = new DiskBasedCache(getCacheDir(), 16 * 1024 * 1024);
volleyQueue = new RequestQueue(cache, new BasicNetwork(new HurlStack()));
volleyQueue.start();

from

https://stackoverflow.com/a/21299261/3399432

This changes the cache size

Community
  • 1
  • 1
UtsavShah
  • 797
  • 7
  • 18
1

I was having a very similar issue with loading images into a ListView. It seems you have to handle pulling from the cache yourself.

Below is my implementation which I have in my public View getView(int position, View convertView, ViewGroup parent) adapter method:

Bitmap cachedBitmap = imageCache.getBitmap(item.getPhotoUrl());
if (cachedBitmap != null)
{
    holder.photo.setImageBitmap(cachedBitmap);
}
else {
    ImageLoader imageLoader = new ImageLoader(Volley.newRequestQueue(this.context), imageCache);
    imageLoader.get(item.getPhotoUrl(), new ImageLoader.ImageListener() {
        @Override
        public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {
            if (item.getPhotoUrl() != null && response.getBitmap() != null)
                imageCache.putBitmap(item.getPhotoUrl(), response.getBitmap());
        }

        @Override
        public void onErrorResponse(VolleyError error) {
            error.printStackTrace();
        }
    });

    //This is a custom imageview, you can create your own implementation for loading the image url to the imageview
    holder.photo.setImageUrl(item.getPhotoUrl(), imageLoader);
}
honk
  • 7,217
  • 11
  • 62
  • 65
Chackle
  • 2,161
  • 13
  • 30