web-dev-qa-db-ja.com

グライド画像の読み込みタイムアウトの増加

グライドを使用してURLから画像を読み込みます。画像をフェッチしている間、画像ビューにローダーを表示しています。フェッチされている画像の一部は大きいため、インターネット接続が遅いとタイムアウトが発生し、例外がスローされます

タイムアウトを増やすにはどうすればよいですか?

13
Karthik K M

ボレーを使用している場合、たくさん検索した後、最終的に答えが得られました:

public class CustomGlide implements GlideModule {
    @Override
    public void applyOptions(Context context, GlideBuilder builder) {
    }

    @Override
    public void registerComponents(Context context, Glide glide) {
        RequestQueue queue = new RequestQueue( // params hardcoded from Volley.newRequestQueue()
                new DiskBasedCache(new File(context.getCacheDir(), "volley")),
                new BasicNetwork(new HurlStack())) {
            @Override public <T> Request<T> add(Request<T> request) {
                request.setRetryPolicy(new DefaultRetryPolicy(10000, 1, 1));
                return super.add(request);
            }
        };
        queue.start();
        glide.register(GlideUrl.class, InputStream.class, new VolleyUrlLoader.Factory(queue));
    }
}

必要に応じてDefaultRetryPolicyを変更します

そしてマニフェストで:

 <meta-data
            Android:name="<package-name>.CustomGlide"
            Android:value="GlideModule" />
10
Karthik K M

OkHttpを使用する場合は、 this に従ってglide:okhttp-integrationをインポートしてから、独自のOkHttpGlideModuleを実装してください。

@GlideModule
public class CustomGlideModule extends OkHttpGlideModule {
    @Override
    public void applyOptions(Context context, GlideBuilder builder) {
        // stub
    }

    @Override
    public void registerComponents(Context context, Glide glide) {
        final OkHttpClient.Builder builder = new OkHttpClient.Builder();

        // set your timeout here
        builder.readTimeout(30, TimeUnit.SECONDS);
        builder.writeTimeout(30, TimeUnit.SECONDS);
        builder.connectTimeout(30, TimeUnit.SECONDS);

        glide.register(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory(builder.build()));
    }
}
9
David Cheung

以下の解決策は次のとおりです。Glide 4.3.1OkHttp 3.9.1、以前とは少し異なります(OkHttpGlideModuleではなくAppGlideModuleです)。

build.gradle

implementation 'com.squareup.okhttp3:okhttp:3.9.1'
implementation 'com.github.bumptech.glide:glide:4.3.1'
annotationProcessor 'com.github.bumptech.glide:compiler:4.3.1'
implementation 'com.github.bumptech.glide:okhttp3-integration:4.3.1'

CustomGlideModule

@GlideModule
public class CustomGlideModule extends AppGlideModule {

    @Override
    public void registerComponents(Context context, Glide glide, Registry registry) {
        final OkHttpClient.Builder builder = new OkHttpClient.Builder();
        builder.readTimeout(YOUR_CUSTOM_TIMEOUT, TimeUnit.SECONDS);
        builder.writeTimeout(YOUR_CUSTOM_TIMEOUT, TimeUnit.SECONDS);
        builder.connectTimeout(YOUR_CUSTOM_TIMEOUT, TimeUnit.SECONDS);
        registry.append(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory(builder.build()));
    }

}
8
Jing Li

これを試して:

Glide.with(this)
         .setDefaultRequestOptions(new RequestOptions().timeout(30000))
         .load(image_URL.get(0))
         .placeholder(getResources().getDrawable(R.drawable.no_image))
         .error(getResources().getDrawable(R.drawable.no_image))                
         .into(imageView);
0
Muahmmad Tayyib