滑动图像加载超时增加
glide image loading timeout increase
我正在使用 glide 从 URL 加载图像。
当我获取图像时,我在图像视图中显示了一个加载程序。
一些正在获取的图像较大,因此在缓慢的互联网连接超时发生并抛出异常
如何增加超时时间?
找了很多终于有了答案,如果你用的是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" />
如果您想使用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()));
}
}
下面是 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()));
}
}
.timeout(30000)
最短的方法:
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions()
.timeout(30000))
.load("https://whosebug.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);
我正在使用 glide 从 URL 加载图像。 当我获取图像时,我在图像视图中显示了一个加载程序。 一些正在获取的图像较大,因此在缓慢的互联网连接超时发生并抛出异常
如何增加超时时间?
找了很多终于有了答案,如果你用的是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" />
如果您想使用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()));
}
}
下面是 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()));
}
}
.timeout(30000)
最短的方法:
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions()
.timeout(30000))
.load("https://whosebug.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);