web-dev-qa-db-ja.com

glideに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にはもうありません。だから私はGlideのためにOkHttpClientを設定する方法を疑問に思っていました

19
user2934930

OkHttpUrlLoaderを使用するには、@ darwinが言ったように依存関係を追加する必要がありますが、依存関係の問題があります https://github.com/bumptech/glide/issues/941 。したがって、これを依存関係に追加します

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

glide 4.0.0以降、少し変更されています。

まず第一にGlideModuleは非推奨です。アプリケーションを開発する場合はAppGlideModuleを使用し、ライブラリ開発にはLibraryGlideModuleを使用する必要があります。カスタムAppGlideModuleクラスの上で_@GlideModule_を使用する必要があります。

次に、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'
    }
_
38
Amir Ziarati

アプリgradileファイルにokhttp3-integration依存関係を追加する必要があります

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

公式リンクを参照 glide integration module

その後、okhttpでGlideModuleを追加できます...

2
darwin