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
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'
}
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'
}
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 ...