Как установить OkHttpClient для скольжения

Я использую Glide для загрузки изображений, проблема, с которой я сталкиваюсь, заключается в том, что при запуске приложения при медленном подключении к Интернету я получаю SocketTimeOutException. Поэтому для решения этой проблемы я хочу использовать пользовательский OkHttpClient, чтобы я мог изменить тайм-аут HttpClient, это код, который у меня есть.

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

но OkHttpUrlLoader больше не существует в Glide API. Поэтому мне было интересно, как установить OkHttpClient для Glide

Ответ 1

Чтобы использовать OkHttpUrlLoader, вам нужно добавить зависимости, как сказал @darwin, но есть проблема с зависимостями https://github.com/bumptech/glide/issues/941. Так что вы будете добавлять это в свои зависимости

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

Ответ 2

, так как glide 4.0.0 немного изменился.

прежде всего GlideModule устарел, и вам нужно использовать AppGlideModule, если вы разрабатываете приложение и LibraryGlideModule для разработки библиотеки. вам нужно использовать @GlideModule над вашим пользовательским классом AppGlideModule.

Во-вторых, в Glide не существует метода register().

и, наконец, okhttp3 будет использовать построитель.

для приложений это будет следующим:

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

вам нужно будет иметь всю эту зависимость с точными версиями в вашем приложении gradle:

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

Ответ 3

Вам нужно добавить зависимость okhttp3-интеграции к вашему графическому файлу приложения

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

Отправьте официальную ссылку модуль интеграции глистов

После этого вы можете добавить GlideModule с okhttp...

Ответ 4

Добавить или обновить версию okhttp3-integration:4.4.0

implementation ('com.github.bumptech.glide:okhttp3-integration:4.4.0'){
        exclude group: 'glide-parent'
    }