web-dev-qa-db-fra.com

Comment définir OkHttpClient pour glide

J'utilise Glide pour charger des images, le problème auquel je suis confronté est que lorsque j'exécute une application sur une connexion Internet lente, je reçois SocketTimeOutException. Donc, pour résoudre ce problème, je veux utiliser un OkHttpClient personnalisé afin que je puisse changer le délai d'expiration de HttpClient, c'est le code que j'ai.

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

mais OkHttpUrlLoader n'est plus là dans l'API Glide. Je me demandais donc comment définir OkHttpClient pour Glide

19
user2934930

Pour utiliser OkHttpUrlLoader, vous devez ajouter des dépendances comme l'a dit @darwin mais il y a un problème de dépendance https://github.com/bumptech/glide/issues/941 . Vous l'ajouterez donc dans vos dépendances

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

depuis glide 4.0.0 il a un peu changé.

tout d'abord, GlideModule est obsolète et vous devez utiliser AppGlideModule si vous développez une application et LibraryGlideModule pour le développement de la bibliothèque. vous devez utiliser @GlideModule au-dessus de votre classe AppGlideModule personnalisée.

d'autre part, il n'y a plus de méthode register() dans l'objet Glide.

et enfin okhttp3 utilisera un constructeur.

ce sera comme ci-dessous pour les applications:

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

vous aurez besoin d'avoir toutes ces dépendances avec les versions exactes dans votre fichier de gradation d'application:

 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'
    }
38
Amir Ziarati

Vous devez ajouter la dépendance d'intégration okhttp3 à votre fichier de notes d'application

dependencies {
compile 'com.github.bumptech.glide:okhttp3-integration:1.4.0@aar'
//compile 'com.squareup.okhttp3:okhttp:3.2.0'}

Reportez-vous au lien officiel module d'intégration glide

Après cela, vous pouvez ajouter GlideModule avec okhttp ...

2
darwin