2016-03-31 6 views
12

Ich benutze glide um Bilder von URL zu laden. Während ich die Bilder abrufe zeige ich einen Loader in der Bildansicht. Einige der Bilder, die abgerufen werden, sind größer und daher tritt bei langsamer Internetverbindungs-Zeitüberschreitung eine Ausnahme auf.Glide Image Loading Timeout erhöhen

Wie kann ich die Zeitüberschreitung erhöhen?

+0

Haben Sie statt Volley OK HTTP versuchen Sie es mit? Wie hier erklärt: https://github.com/bumptech/glide/wiki/Integration-Libraries#okhttp – alexislg

+1

Nein, ich verwendete volley –

Antwort

11

Nach viel schließlich suchen eine Antwort bekam, wenn Sie Volley verwenden:

public class CustomGlide implements GlideModule { 
    @Override 
    public void applyOptions(Context context, GlideBuilder builder) { 
    } 

    @Override 
    public void registerComponents(Context context, Glide glide) { 
     RequestQueue queue = new RequestQueue(// params hardcoded from Volley.newRequestQueue() 
       new DiskBasedCache(new File(context.getCacheDir(), "volley")), 
       new BasicNetwork(new HurlStack())) { 
      @Override public <T> Request<T> add(Request<T> request) { 
       request.setRetryPolicy(new DefaultRetryPolicy(10000, 1, 1)); 
       return super.add(request); 
      } 
     }; 
     queue.start(); 
     glide.register(GlideUrl.class, InputStream.class, new VolleyUrlLoader.Factory(queue)); 
    } 
} 

Ändern der DefaultRetryPolicy nach Ihrem Bedarf

Und im Manifest:

<meta-data 
      android:name="<package-name>.CustomGlide" 
      android:value="GlideModule" /> 
+0

Ich habe customGlide-Klasse deklariert, wie Sie sagen, aber jetzt, wie man es in glide laden Bildzeile in Java verwenden Klasse? – Dharmishtha

+0

Haben Sie im Manifest deklariert? –

+0

Ja, ich habe implementiert – Dharmishtha

9

Wenn Sie möchten OkHttp verwenden, importieren Sie bitte glide:okhttp-integration nach this und implementieren Sie dann Ihre eigene OkHttpGlideModule:

public class CustomGlideModule extends OkHttpGlideModule { 
    @Override 
    public void applyOptions(Context context, GlideBuilder builder) { 
     // stub 
    } 

    @Override 
    public void registerComponents(Context context, Glide glide) { 
     final OkHttpClient.Builder builder = new OkHttpClient.Builder(); 

     // set your timeout here 
     builder.readTimeout(30, TimeUnit.SECONDS); 
     builder.writeTimeout(30, TimeUnit.SECONDS); 
     builder.connectTimeout(30, TimeUnit.SECONDS); 

     glide.register(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory(builder.build())); 
    } 
} 
3

Im Folgenden finden Sie die Lösung für: Glide 4.3.1 & OkHttp 3.9.1, ein bisschen anders als zuvor (es ist nicht mehr OkHttpGlideModule aber AppGlideModule).

build.gradle

implementation 'com.squareup.okhttp3:okhttp:3.9.1' 
implementation 'com.github.bumptech.glide:glide:4.3.1' 
annotationProcessor 'com.github.bumptech.glide:compiler:4.3.1' 
implementation 'com.github.bumptech.glide:okhttp3-integration:4.3.1' 

CustomGlideModule

@GlideModule 
public class CustomGlideModule extends AppGlideModule { 

    @Override 
    public void registerComponents(Context context, Glide glide, Registry registry) { 
     final OkHttpClient.Builder builder = new OkHttpClient.Builder(); 
     builder.readTimeout(YOUR_CUSTOM_TIMEOUT, TimeUnit.SECONDS); 
     builder.writeTimeout(YOUR_CUSTOM_TIMEOUT, TimeUnit.SECONDS); 
     builder.connectTimeout(YOUR_CUSTOM_TIMEOUT, TimeUnit.SECONDS); 
     registry.append(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory(builder.build())); 
    } 

}