2016-05-13 8 views
6

Ich benutze Glide, um Bilder zu laden, das Problem, das mir gegenübersteht, ist, dass, wenn ich App auf langsamer Internetverbindung laufen lasse ich SocketTimeOutException bekomme. Also, um dieses Problem zu lösen, möchte ich eine benutzerdefinierte OkHttpClient verwenden, so dass ich das Timeout von HttpClient ändern kann, das ist der Code, den ich habe.Wie setze ich OKHttpClient für glide

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

    } 

    @Override 
    public void registerComponents(Context context, Glide glide) { 
     OkHttpClient client = new OkHttpClient(); 
     client.setConnectTimeout(15, TimeUnit.SECONDS); 
     client.setReadTimeout(15,TimeUnit.SECONDS); 
     OkHttpUrlLoader.Factory factory = new OkHttpUrlLoader.Factory(client); 
     glide.register(GlideUrl.class, InputStream.class, factory); 
    } 
} 

aber OkHttpUrlLoader ist nicht mehr dort in Glide-API. Also ich frage mich, wie die OkHttpClient für Glide einstellen

+0

Glide direkt herunterladen Bild n in der Bildansicht –

+0

@DixitPanchal ja, aber Sie können die Konfiguration wie HttpClient mit GlideModule – user2934930

Antwort

4

Um OkHttpUrlLoader zu verwenden, müssen Sie Abhängigkeiten hinzufügen, wie der @darwin sagt, aber es gibt Abhängigkeitsproblem https://github.com/bumptech/glide/issues/941. So werden Sie dies in Ihrer Abhängigkeiten werden, indem

compile ('com.github.bumptech.glide:okhttp3-integration:1.4.0'){ 
     exclude group: 'glide-parent' 
    } 
+1

es kann OkHttpUrlLoader nicht finden, wenn ich das tue –

2

Sie müssen, dass okhttp3-Integration Abhängigkeit zu Ihrer App gradile Datei hinzufügen

dependencies { 
compile 'com.github.bumptech.glide:okhttp3-integration:[email protected]' 
//compile 'com.squareup.okhttp3:okhttp:3.2.0'} 

Reffer der offizielle Link glide integration module

Nach u GlideModule hinzufügen mit okhttp ...

+0

ändern Wenn Sie Gradle verwenden, können Sie dieses Modul einfach durch die abhängig von der aar, das Modul wird durch manifest Merger eingebunden werden. Es ist nicht notwendig, ein GlideModule selbst hinzuzufügen. – Murciegalo84

10

seit gleiten 4.0.0 es ein wenig verändert hat.

allererst GlideModule ist veraltet und Sie müssen AppGlideModule verwenden, wenn Sie eine Anwendung und LibraryGlideModule für Bibliotheksentwicklung entwickeln. Sie müssen @GlideModule über Ihrer benutzerdefinierten AppGlideModule Klasse verwenden.

zweitens gibt es keine register() Methode in Glide Objekt mehr.

und schließlich okhttp3 wird einen Builder verwenden.

es wird für Anwendungen wie unten sein:

@GlideModule 
    private class CustomGlideModule extends AppGlideModule { 

     @Override 
     public void registerComponents(Context context, Glide glide, Registry registry) { 
      OkHttpClient client = new OkHttpClient.Builder() 
        .readTimeout(15, TimeUnit.SECONDS) 
        .connectTimeout(15, TimeUnit.SECONDS) 
        .build(); 

     OkHttpUrlLoader.Factory factory = new OkHttpUrlLoader.Factory(client); 

      glide.getRegistry().replace(GlideUrl.class, InputStream.class, factory); 
     } 
    } 

Sie alle diese Abhängigkeit mit den genauen Versionen in Ihrer App gradle Datei haben müssen:

compile "com.squareup.okhttp3:okhttp:3.8.1" 
    compile 'com.github.bumptech.glide:glide:4.0.0' 
    compile ('com.github.bumptech.glide:okhttp3-integration:4.0.0'){ 
     exclude group: 'glide-parent' 
    } 
+2

Es funktioniert für mich außer der fehlenden .build() am Ende der connecttimeout Zeile. –

+1

korrigiert. Vielen Dank –