2016-05-13 13 views
6

Sto usando Glide per caricare immagini, il problema che sto affrontando è che quando eseguo app su connessione internet lenta mi sto prendendo SocketTimeOutException. Quindi per risolvere questo problema voglio usare un custom OkHttpClient in modo che possa cambiare il timeout di HttpClient questo è il codice che ho.Come impostare OkHttpClient per 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); 
    } 
} 

ma OkHttpUrlLoader non c'è più in Glide API. Quindi mi chiedevo come si può impostare l'OkHttpClient per Glide

+0

Glide scaricare direttamente l'immagine n impostato in Image view –

+0

@DixitPanchal yes ma è possibile modificare la configurazione come HttpClient usando GlideModule – user2934930

risposta

4

Per utilizzare OkHttpUrlLoader è necessario aggiungere dipendenze come ha affermato @darwin ma esiste il problema di dipendenza https://github.com/bumptech/glide/issues/941. Quindi vi sarà l'aggiunta questo nelle vostre dipendenze

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

non riesce a trovare OkHttpUrlLoader se lo faccio –

2

È necessario aggiungere la dipendenza okhttp3-integrazione per la vostra applicazione di file gradile

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

Reffer il link ufficiale glide integration module

Dopo che u può aggiungere GlideModule con okhttp ...

+0

Se si sta utilizzando gradle, è possibile includere questo modulo semplicemente in base a aar, il modulo verrà unito da manifesta fusione. Non è necessario aggiungere un GlideModule da solo. – Murciegalo84

10

dal glide 4.0.0 ha cambiato un po '.

prima di tutto GlideModule è deprecato ed è necessario utilizzare AppGlideModule se si sta sviluppando un'applicazione e LibraryGlideModule per lo sviluppo della libreria. devi utilizzare @GlideModule sopra la tua classe personalizzata AppGlideModule.

in secondo luogo non esiste più il metodo nell'oggetto Glide.

e infine okhttp3 utilizzerà un builder.

sarà come di seguito per le applicazioni:

@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); 
     } 
    } 

avrete bisogno di avere tutte queste dipendenze con le versioni esatte nel file Gradle app:

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

Funziona per me tranne il .build() mancante alla fine della linea connecttimeout. –

+1

corretto. Grazie –

Problemi correlati