October 26, 2024
Chicago 12, Melborne City, USA
java

Glide showing only some (randomly) images from Google Drive


I have a quiz app, where I have a category with picture identification, nothing fancy.
To prevent increased app size I decided to store images at Google Drive (seemed as best solution for me, because I can create images on my PC and then stream it to Drive immediatly a more importantly automatically).
BUT my function is showing only some images, and always random ones. Imagine you have 10 quiz questions – first image is loaded, 2nd and 3rd not, but 4th yes and so on. Always randomly. Next time 1st is not loaded, but 2nd yes, 3rd not…

Function code:

private void loadImage(String id, ImageView mainImage){
    Glide.with(this)
            .asBitmap()
            .load(BASE_URL + id)
            .fitCenter()
            .diskCacheStrategy(DiskCacheStrategy.NONE)
            .dontAnimate()
            .listener(new RequestListener<Bitmap>() {
                @Override
                public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Bitmap> target, boolean isFirstResource) {
                    assert e != null;
                    for (Throwable t : e.getRootCauses()) {
                        Log.e("TAG", "Caused by", t);
                    }
                    e.logRootCauses("TAG");
                    return false;
                }

                @Override
                public boolean onResourceReady(Bitmap resource, Object model, Target<Bitmap> target, DataSource dataSource, boolean isFirstResource) {
                    Toast.makeText(getApplicationContext(), "Image ready!", Toast.LENGTH_LONG).show();
                    return false;
                }
            })
            .into(mainImage);
}

BASE_URL is standard "https://docs.google.com/uc?id=" and id is fetched as a question from array

Logcat error:

E  Caused by com.bumptech.glide.load.HttpException: Failed to connect or obtain data, status code: -1
    at com.bumptech.glide.load.data.HttpUrlFetcher.loadDataWithRedirects(HttpUrlFetcher.java:98)
    at com.bumptech.glide.load.data.HttpUrlFetcher.loadDataWithRedirects(HttpUrlFetcher.java:122)
    at com.bumptech.glide.load.data.HttpUrlFetcher.loadData(HttpUrlFetcher.java:58)
    at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100)
    at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:95)
    at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:88)
    at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:311)
    at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:277)
    at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:235)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
    at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:421)
    at java.lang.Thread.run(Thread.java:923)
    at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultPriorityThreadFactory$1.run(GlideExecutor.java:380)
Caused by: java.net.SocketTimeoutException: timeout
    at com.android.okhttp.okio.Okio$3.newTimeoutException(Okio.java:214)
    at com.android.okhttp.okio.AsyncTimeout.exit(AsyncTimeout.java:263)
    at com.android.okhttp.okio.AsyncTimeout$2.read(AsyncTimeout.java:217)
    at com.android.okhttp.okio.RealBufferedSource.indexOf(RealBufferedSource.java:307)
    at com.android.okhttp.okio.RealBufferedSource.indexOf(RealBufferedSource.java:301)
    at com.android.okhttp.okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:197)
    at com.android.okhttp.internal.http.Http1xStream.readResponse(Http1xStream.java:188)
    at com.android.okhttp.internal.http.Http1xStream.readResponseHeaders(Http1xStream.java:129)
    at com.android.okhttp.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:750)
    at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:622)
    at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:475)
    at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:411)
    at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:248)
    at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:211)
    at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:30)
    at com.bumptech.glide.load.data.HttpUrlFetcher.loadDataWithRedirects(HttpUrlFetcher.java:95)
    at com.bumptech.glide.load.data.HttpUrlFetcher.loadDataWithRedirects(HttpUrlFetcher.java:122) 
    at com.bumptech.glide.load.data.HttpUrlFetcher.loadData(HttpUrlFetcher.java:58) 
    at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100) 
    at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:95) 
    at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:88) 
    at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:311) 
    at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:277) 
    at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:235) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
    at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:421) 
    at java.lang.Thread.run(Thread.java:923) 
    at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultPriorityThreadFactory$1.run(GlideExecutor.java:380) 
Caused by: java.net.SocketTimeoutException: Read timed out
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.socketRead(SocketInputStream.java:119)
    at java.net.SocketInputStream.read(SocketInputStream.java:176)
    at java.net.SocketInputStream.read(SocketInputStream.java:144)
    at com.android.org.conscrypt.ConscryptEngineSocket$SSLInputStream.readFromSocket(ConscryptEngineSocket.java:936)
    at com.android.org.conscrypt.ConscryptEngineSocket$SSLInputStream.processDataFromSocket(ConscryptEngineSocket.java:900)
    at com.android.org.conscrypt.ConscryptEngineSocket$SSLInputStream.readUntilDataAvailable(ConscryptEngineSocket.java:815)
    at com.android.org.conscrypt.ConscryptEngineSocket$SSLInputStream.read(ConscryptEngineSocket.java:788)
    at com.android.okhttp.okio.Okio$2.read(Okio.java:138)
    at com.android.okhttp.okio.AsyncTimeout$2.read(AsyncTimeout.java:213)
    at com.android.okhttp.okio.RealBufferedSource.indexOf(RealBufferedSource.java:307) 
    at com.android.okhttp.okio.RealBufferedSource.indexOf(RealBufferedSource.java:301) 
    at com.android.okhttp.okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:197) 
    at com.android.okhttp.internal.http.Http1xStream.readResponse(Http1xStream.java:188) 
    at com.android.okhttp.internal.http.Http1xStream.readResponseHeaders(Http1xStream.java:129) 
    at com.android.okhttp.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:750) 
    at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:622) 
    at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:475) 
    at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:411) 
    at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:248) 
    at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:211) 
    at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:30) 
    at com.bumptech.glide.load.data.HttpUrlFetcher.loadDataWithRedirects(HttpUrlFetcher.java:95) 
    at com.bumptech.glide.load.data.HttpUrlFetcher.loadDataWithRedirects(HttpUrlFetcher.java:122) 
    at com.bumptech.glide.load.data.HttpUrlFetcher.loadData(HttpUrlFetcher.java:58) 
    at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100) 
    at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:95) 
    at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:88) 
    at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:311) 
    at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:277) 
    at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:235) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
    at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:421) 
    at java.lang.Thread.run(Thread.java:923) 
    at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultPriorityThreadFactory$1.run(GlideExecutor.java:380) 

I mean status code -1? I’m used for Http exceptions 400-500 but -1?
I tried to make sense of the error, but that’s to much for me, I’m not that experienced with https and stuff.

Thanks for any help!



You need to sign in to view this answers

Leave feedback about this

  • Quality
  • Price
  • Service

PROS

+
Add Field

CONS

+
Add Field
Choose Image
Choose Video