Java 使用Glide从Firebase下载图像-如何实现超时?
我正在成功地使用Glide从Firebase下载图像 我有我的标准模块:Java 使用Glide从Firebase下载图像-如何实现超时?,java,android,firebase,firebase-storage,android-glide,Java,Android,Firebase,Firebase Storage,Android Glide,我正在成功地使用Glide从Firebase下载图像 我有我的标准模块: @GlideModule public class MyGlideModule extends AppGlideModule { @Override public void registerComponents(Context context, Glide glide, Registry registry) { // Register FirebaseImageLoader to hand
@GlideModule
public class MyGlideModule extends AppGlideModule {
@Override
public void registerComponents(Context context, Glide glide, Registry registry) {
// Register FirebaseImageLoader to handle StorageReference
registry.append(StorageReference.class, InputStream.class,
new FirebaseImageLoader.Factory());
}
}
然后在我的活动中:
GlideApp.with(this /* context */)
.load(storageReference)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.fitCenter()
.error(R.drawable.broken)
.transition(DrawableTransitionOptions.withCrossFade(2000))
.listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
Log.i("Info","Load failed");
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
Log.i("Info","Load successful");
return false;
}
})
.into(imageView);
GlideApp.with(此/*context*/)
.load(存储参考)
.diskCacheStrategy(diskCacheStrategy.NONE)
.skipMemoryCache(真)
.fitCenter()
.错误(R.可拉伸.断裂)
.transition(可绘制的TransitionOptions.withCrossFade(2000))
.listener(新的RequestListener(){
@凌驾
public boolean onload失败(@Nullable glide,对象模型,目标,boolean isFirstResource){
Log.i(“信息”,“加载失败”);
返回false;
}
@凌驾
公共布尔onResourceReady(可绘制资源、对象模型、目标、数据源数据源、布尔isFirstResource){
Log.i(“信息”,“加载成功”);
返回false;
}
})
.进入(图像视图);
这通常可以正常工作,但当设备没有internet连接时,imageview将保持空白-不会触发R.drawable.Breaked
错误图像,也不会触发onLoadFailed
或onResourceReady
。如果信号恢复,则图像会出现
我想检测这种情况,并向用户表明他们需要更好的信号。显而易见的方法是实现超时(因为似乎没有超时)。但是,简单地将
.timeout(3000)
添加到活动部分并不起作用,因为在使用模块时会忽略这一点。我假设答案在FirebaseImageLoader.Factory()
的设置中,但是我找不到任何文档,而且源代码中也不清楚。谢谢,我看到了这一点,但在这里不适用,因为他们没有使用FirebaseImageLoader。他们的Factory对象采用队列参数,其中他们编码了超时,而FirebaseImageLoader.Factory不采用任何参数。