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を設定する方法を疑問に思っていました
OkHttpUrlLoaderを使用するには、@ darwinが言ったように依存関係を追加する必要がありますが、依存関係の問題があります https://github.com/bumptech/glide/issues/941 。したがって、これを依存関係に追加します
compile ('com.github.bumptech.glide:okhttp3-integration:1.4.0'){
exclude group: 'glide-parent'
}
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'
}
_
アプリ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を追加できます...