Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set OkHttpClient for glide

I am using Glide to load images, the issue I'm facing is that when i run app on slow internet connection I'm getting SocketTimeOutException. So to solve this issue i want to use a custom OkHttpClient so that I can change the timeout of HttpClient this is the code i have.

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

but OkHttpUrlLoader is not there any more in Glide API. So i was wondering how can set the OkHttpClient for Glide

like image 909
user2934930 Avatar asked May 13 '16 10:05

user2934930


2 Answers

since glide 4.0.0 it has changed a little bit.

first of all GlideModule is deprecated and you need to use AppGlideModule if you are developing an application and LibraryGlideModule for library development. you need to use @GlideModule above your custom AppGlideModule class.

secondly there is no register() method in Glide object any more.

and finally okhttp3 will use a builder.

it'll be like below for apps:

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

you'll need to have all these dependency with the exact versions in your app gradle file:

 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'     } 
like image 178
Amir Ziarati Avatar answered Sep 20 '22 17:09

Amir Ziarati


To use OkHttpUrlLoader you need to add dependencies as the @darwin said but there is dependency issue https://github.com/bumptech/glide/issues/941. So you will be adding this in your dependencies

 compile ('com.github.bumptech.glide:okhttp3-integration:1.4.0'){         exclude group: 'glide-parent'     } 
like image 34
umerk44 Avatar answered Sep 20 '22 17:09

umerk44