滑动图像加载超时增加
Posted
技术标签:
【中文标题】滑动图像加载超时增加【英文标题】:glide image loading timeout increase 【发布时间】:2016-07-20 06:15:58 【问题描述】:我正在使用 glide 从 URL 加载图像。 当我获取图像时,我在图像视图中显示了一个加载器。 某些正在获取的图像较大,因此在缓慢的互联网连接中会发生超时并引发异常
如何增加超时时间?
【问题讨论】:
您是否尝试过使用 OK HTTP 而不是 volley?就像这里解释的那样:github.com/bumptech/glide/wiki/Integration-Libraries#okhttp 【参考方案1】:找了很多终于有了答案,如果你是用volley的话:
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" />
【讨论】:
我已经像你说的那样声明了 customGlide 类,但是现在如何在 java 类的滑动加载图像行中使用它? 现在滑行配置了你提供的超时时间。只需使用 Glide.with(context).load(url).into(ImageView) 请求图像 对于 VolleyUrlLoader,您需要添加: compile 'com.github.bumptech.glide:volley-integration:1.5.0@aar' 到您的依赖项。 为了避免 conflict 和VolleyGlideModule
在您使用 Gradle 时自动添加到合并清单中,您必须通过添加另一个元数据条目来手动排除它:<meta-data android:name="com.bumptech.glide.integration.volley.VolleyGlideModule" tools:node="remove" />
@knezmilos 在 VolleyUrlLoader 上编译时显示未解决的超类型错误【参考方案2】:
下面是解决方案: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'
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()));
【讨论】:
【参考方案3】:如果要使用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()));
【讨论】:
【参考方案4】:新版glide可以使用这个方法
.timeout(60000)
最终的代码示例将是:
Glide.with(imageView.getContext())
.load(finalUrl)
.timeout(60000)
.placeholder(R.drawable.place_holder)
.into(imageView);
【讨论】:
【参考方案5】:.timeout(30000)
最短的方法:
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions()
.timeout(30000))
.load("https://***.com/posts/58063088/edit")
.placeholder(getResources().getDrawable(R.drawable.no_image))
.error(getResources().getDrawable(R.drawable.no_image))
.into(imageView);
【讨论】:
以上是关于滑动图像加载超时增加的主要内容,如果未能解决你的问题,请参考以下文章