Android 滑动图像加载超时增加

Android 滑动图像加载超时增加,android,timeout,android-glide,Android,Timeout,Android Glide,我正在使用glide从URL加载图像。 在获取图像时,我在图像视图中显示加载程序。 正在获取的某些图像较大,因此在慢速internet连接中会发生超时并引发异常 如何增加超时时间?在搜索了很多后,如果您使用截击,最终得到了答案: public class CustomGlide implements GlideModule { @Override public void applyOptions(Context context, GlideBuilder builder) {

我正在使用glide从URL加载图像。 在获取图像时,我在图像视图中显示加载程序。 正在获取的某些图像较大,因此在慢速internet连接中会发生超时并引发异常


如何增加超时时间?

在搜索了很多后,如果您使用截击,最终得到了答案:

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

如果您想使用
OkHttp
,请根据导入
glide:OkHttp集成
,然后实现您自己的
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()));
    }
}

下面是解决方案:
Glide 4.3.1
&
OkHttp 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'
@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()));
    }

}
自定义滑动模块

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

}

做到这一点的最短方法:

Glide.with(this)
         .setDefaultRequestOptions(new RequestOptions()
         .timeout(30000))
         .load("https://stackoverflow.com/posts/58063088/edit")
         .placeholder(getResources().getDrawable(R.drawable.no_image))
         .error(getResources().getDrawable(R.drawable.no_image))                
         .into(imageView);

您可以使用新版本glide的这种方法

.timeout(60000)
最终代码示例将是:

Glide.with(imageView.getContext())
        .load(finalUrl)
        .timeout(60000)
        .placeholder(R.drawable.place_holder)
        .into(imageView);

你试过用OK HTTP代替截击吗?就像这里解释的那样:我已经声明了customGlide类,正如您所说,但是现在如何在java类中的glide加载映像行中使用它?现在glide配置了您提供的超时。只需使用Glide.with(context.load(url.into)(ImageView)请求图像对于VolleyUrlLoader,您需要添加:compile'com.github.bumptech.glide:volley集成:1.5。0@aar'添加到您的依赖项。为了避免在使用Gradle时自动添加到合并清单的
VolleyGlideModule
,您必须通过添加另一个元数据条目来手动排除它:
@knezmilos它显示了在VolleyUrlLoader上编译时未解决的超类型错误