Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Glide failing to load images when scrolling a RecyclerView #1930

Closed
fermatijoe opened this issue May 15, 2017 · 2 comments
Closed

Glide failing to load images when scrolling a RecyclerView #1930

fermatijoe opened this issue May 15, 2017 · 2 comments
Labels

Comments

@fermatijoe
Copy link

Hi, I have a problem with glide 3.7.0. I have a RecyclerView with a GridLayoutManager. Every item in the grid must be an image loaded by glide. The problem is that glide takes a very long time to load images, and sometimes it doesn't load them at all. This is exacerbated if the user scrolls down the list: in this case about half of the images are never loaded or are skipped, leaving a black hole.

I set up a listener like this:

.listener(new RequestListener<String, GlideDrawable>() {
                    @Override
                    public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
                        Log.e(LOG_TAG, "GLIDE IMAGE LOAD EXCEPTION");
                        return false;
                    }

                    @Override
                    public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
                        Log.e(LOG_TAG, "GLIDE IMAGE LOAD SUCCESS");
                        return false;
                    }
                })

and unsurprisingly the logcat is filled with GLIDE IMAGE LOAD EXCEPTION. Here is an example logact that i got from just starting the app and scrolling a few rows down

05-11 15:24:21.772 11764-11764/com.android V/ListFragment: Added 20 elememts to the adapter 05-11 15:24:22.260 11764-11764/com.android E/ListFragment: GLIDE IMAGE LOAD EXCEPTION 05-11 15:24:22.556 11764-11764/com.android E/ListFragment: GLIDE IMAGE LOAD EXCEPTION 05-11 15:24:25.624 11764-11764/com.android E/ListFragment: GLIDE IMAGE LOAD EXCEPTION 05-11 15:24:25.775 11764-11764/com.android E/ListFragment: GLIDE IMAGE LOAD EXCEPTION 05-11 15:24:26.734 11764-11764/com.android E/ListFragment: GLIDE IMAGE LOAD SUCCESS 05-11 15:24:28.971 11764-11764/com.android E/ListFragment: GLIDE IMAGE LOAD EXCEPTION 05-11 15:24:29.236 11764-11764/com.android E/ListFragment: GLIDE IMAGE LOAD EXCEPTION 05-11 15:24:32.243 11764-11764/com.android E/ListFragment: GLIDE IMAGE LOAD EXCEPTION 05-11 15:24:32.526 11764-11764/com.android E/ListFragment: GLIDE IMAGE LOAD EXCEPTION 05-11 15:24:32.526 11764-11764/com.android E/ListFragment: GLIDE IMAGE LOAD EXCEPTION 05-11 15:24:35.475 11764-11764/com.android E/ListFragment: GLIDE IMAGE LOAD EXCEPTION 05-11 15:24:35.475 11764-11764/com.android E/ListFragment: GLIDE IMAGE LOAD EXCEPTION 05-11 15:24:35.733 11764-11764/com.android E/ListFragment: GLIDE IMAGE LOAD EXCEPTION 05-11 15:24:35.733 11764-11764/com.android E/ListFragment: GLIDE IMAGE LOAD EXCEPTION 05-11 15:24:36.770 11764-11764/com.android E/ListFragment: GLIDE IMAGE LOAD SUCCESS 05-11 15:24:37.433 11764-11764/com.android E/ListFragment: GLIDE IMAGE LOAD SUCCESS 05-11 15:24:37.433 11764-11764/com.android E/ListFragment: GLIDE IMAGE LOAD SUCCESS 05-11 15:24:37.434 11764-11764/com.android E/ListFragment: GLIDE IMAGE LOAD SUCCESS 05-11 15:24:38.737 11764-11764/com.android E/ListFragment: GLIDE IMAGE LOAD EXCEPTION 05-11 15:24:38.961 11764-11764/com.android E/ListFragment: GLIDE IMAGE LOAD EXCEPTION 05-11 15:24:41.960 11764-11764/com.android E/ListFragment: GLIDE IMAGE LOAD EXCEPTION 05-11 15:24:42.182 11764-11764/com.android E/ListFragment: GLIDE IMAGE LOAD EXCEPTION 05-11 15:24:45.170 11764-11764/com.android E/ListFragment: GLIDE IMAGE LOAD EXCEPTION 05-11 15:24:45.393 11764-11764/com.android E/ListFragment: GLIDE IMAGE LOAD EXCEPTION 05-11 15:24:46.347 11764-11764/com.android E/ListFragment: GLIDE IMAGE LOAD SUCCESS 05-11 15:24:48.616 11764-11764/com.android E/ListFragment: GLIDE IMAGE LOAD EXCEPTION 05-11 15:24:48.849 11764-11764/com.android E/ListFragment: GLIDE IMAGE LOAD EXCEPTION 05-11 15:24:49.869 11764-11764/com.android E/ListFragment: GLIDE IMAGE LOAD SUCCESS 05-11 15:24:51.842 11764-11764/com.android E/ListFragment: GLIDE IMAGE LOAD EXCEPTION 05-11 15:24:52.371 11764-11764/com.android E/ListFragment: GLIDE IMAGE LOAD EXCEPTION 05-11 15:24:55.059 11764-11764/com.android E/ListFragment: GLIDE IMAGE LOAD EXCEPTION 05-11 15:24:55.670 11764-11764/com.android E/ListFragment: GLIDE IMAGE LOAD EXCEPTION 05-11 15:24:56.992 11764-11764/com.android E/ListFragment: GLIDE IMAGE LOAD SUCCESS 05-11 15:24:57.336 11764-11764/com.android E/ListFragment: GLIDE IMAGE LOAD SUCCESS 05-11 15:24:57.690 11764-11764/com.android E/ListFragment: GLIDE IMAGE LOAD SUCCESS 05-11 15:24:58.021 11764-11764/com.android E/ListFragment: GLIDE IMAGE LOAD SUCCESS 05-11 15:24:58.317 11764-11764/com.android E/ListFragment: GLIDE IMAGE LOAD EXCEPTION 05-11 15:25:26.892 11764-11764/com.android E/ListFragment: GLIDE IMAGE LOAD SUCCESS

at this point i used this code to get the stacktrace:

`@Override
                    public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
                        Log.e(LOG_TAG, "GLIDE IMAGE LOAD EXCEPTION");
                        e.printStackTrace();
                        return false;
                    }`

and the error that gets spammed in the logcat is this:

05-11 15:36:45.756 21763-21763/com.android W/System.err: java.net.SocketTimeoutException: timeout 05-11 15:36:45.756 21763-21763/com.android W/System.err: at com.android.okhttp.okio.Okio$3.newTimeoutException(Okio.java:207) 05-11 15:36:45.756 21763-21763/com.android W/System.err: at com.android.okhttp.okio.AsyncTimeout.exit(AsyncTimeout.java:250) 05-11 15:36:45.756 21763-21763/com.android W/System.err: at com.android.okhttp.okio.AsyncTimeout$2.read(AsyncTimeout.java:217) 05-11 15:36:45.756 21763-21763/com.android W/System.err: at com.android.okhttp.okio.RealBufferedSource.indexOf(RealBufferedSource.java:306) 05-11 15:36:45.756 21763-21763/com.android W/System.err: at com.android.okhttp.okio.RealBufferedSource.indexOf(RealBufferedSource.java:300) 05-11 15:36:45.756 21763-21763/com.android W/System.err: at com.android.okhttp.okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:196) 05-11 15:36:45.756 21763-21763/com.android W/System.err: at com.android.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:191) 05-11 15:36:45.757 21763-21763/com.android W/System.err: at com.android.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:80) 05-11 15:36:45.757 21763-21763/com.android W/System.err: at com.android.okhttp.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:904) 05-11 15:36:45.757 21763-21763/com.android W/System.err: at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:788) 05-11 15:36:45.757 21763-21763/com.android W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:439) 05-11 15:36:45.757 21763-21763/com.android W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:384) 05-11 15:36:45.757 21763-21763/com.android W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:497) 05-11 15:36:45.757 21763-21763/com.android W/System.err: at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getResponseCode(DelegatingHttpsURLConnection.java:105) 05-11 15:36:45.757 21763-21763/com.android W/System.err: at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java) 05-11 15:36:45.757 21763-21763/com.android W/System.err: at com.bumptech.glide.load.data.HttpUrlFetcher.loadDataWithRedirects(HttpUrlFetcher.java:76) 05-11 15:36:45.757 21763-21763/com.android W/System.err: at com.bumptech.glide.load.data.HttpUrlFetcher.loadData(HttpUrlFetcher.java:44) 05-11 15:36:45.757 21763-21763/com.android W/System.err: at com.bumptech.glide.load.data.HttpUrlFetcher.loadData(HttpUrlFetcher.java:20) 05-11 15:36:45.757 21763-21763/com.android W/System.err: at com.bumptech.glide.load.model.ImageVideoModelLoader$ImageVideoFetcher.loadData(ImageVideoModelLoader.java:70) 05-11 15:36:45.757 21763-21763/com.android W/System.err: at com.bumptech.glide.load.model.ImageVideoModelLoader$ImageVideoFetcher.loadData(ImageVideoModelLoader.java:53) 05-11 15:36:45.757 21763-21763/com.android W/System.err: at com.bumptech.glide.load.engine.DecodeJob.decodeSource(DecodeJob.java:170) 05-11 15:36:45.757 21763-21763/com.android W/System.err: at com.bumptech.glide.load.engine.DecodeJob.decodeFromSource(DecodeJob.java:128) 05-11 15:36:45.757 21763-21763/com.android W/System.err: at com.bumptech.glide.load.engine.EngineRunnable.decodeFromSource(EngineRunnable.java:122) 05-11 15:36:45.757 21763-21763/com.android W/System.err: at com.bumptech.glide.load.engine.EngineRunnable.decode(EngineRunnable.java:101) 05-11 15:36:45.757 21763-21763/com.android W/System.err: at com.bumptech.glide.load.engine.EngineRunnable.run(EngineRunnable.java:58) 05-11 15:36:45.757 21763-21763/com.android W/System.err: at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423) 05-11 15:36:45.757 21763-21763/com.android W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237) 05-11 15:36:45.757 21763-21763/com.android W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 05-11 15:36:45.757 21763-21763/com.android W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 05-11 15:36:45.757 21763-21763/com.android W/System.err: at java.lang.Thread.run(Thread.java:818) 05-11 15:36:45.757 21763-21763/com.android W/System.err: at com.bumptech.glide.load.engine.executor.FifoPriorityThreadPoolExecutor$DefaultThreadFactory$1.run(FifoPriorityThreadPoolExecutor.java:118)

This is the code I use to load the images:

`@Override
public void onBindViewHolder(WallHolder holder, final int position) {
final Wallpaper currentWallpaper = mWallpapers.get(position);

        String resizedUrl = currentWallpaper.getUrl();
        resizedUrl = resizedUrl.replace("https://", "https://rsz.io/");
        resizedUrl = resizedUrl + "?width=500";
        Glide.with(getActivity())
                .load(resizedUrl)
                .crossFade(500)
                .listener(new RequestListener<String, GlideDrawable>() {
                    @Override
                    public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
                        Log.e(LOG_TAG, "GLIDE IMAGE LOAD EXCEPTION");
                        e.printStackTrace();
                        return false;
                    }

                    @Override
                    public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
                        Log.e(LOG_TAG, "GLIDE IMAGE LOAD SUCCESS");
                        return false;
                    }
                })
                .diskCacheStrategy(DiskCacheStrategy.RESULT)
                .into(holder.mImageView);

    }`

See that I use a resizing api (rsz.io) which reduces the image to 500px wide where the original images would be of about 1000-2000 px wide. Thanks.

@sjudd
Copy link
Collaborator

sjudd commented May 15, 2017

05-11 15:36:45.756 21763-21763/com.android W/System.err: java.net.SocketTimeoutException:

You're exceeding the timeouts set in the networking library. See #432

@Ibrahim5153
Copy link

Guys I have the same issue and I believe it is because of the timeout but I have tried increasing timeout like sjudd mentioned above but it does not fix my issue.

When I don't scroll the recyclerview and wait for loading image it load images properly but if I scroll rapidly it stops loading images and start throwing exception "Failed to load recourse".

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants