安卓:滑翔在onStart /错误的onResume
我有滑翔一个奇怪的错误,我不知道该怎么办才好。基本上我有这个功能,它从reddit.com/r/earthporn/加载图像安卓:滑翔在onStart /错误的onResume
newsdata.data.children [位置] .data.url是URL的列表
public void displayImage(final int position) {
Drawable d = view.getContext().getResources().getDrawable(R.drawable.ic_collections_white_24dp);
System.out.println(newsData.data.children[position].data.url);
Glide.with(view.getContext())
.load(newsData.data.children[position].data.url)
.asBitmap()
.listener(new RequestListener<String, Bitmap>() {
@Override
public boolean onException(Exception e, String model, Target<Bitmap> target, boolean isFirstResource) {
displayImage(position + 1);
//todo: make sure we don't run into a index out of bounds.
return false;
}
@Override
public boolean onResourceReady(Bitmap resource, String model, Target<Bitmap> target, boolean isFromMemoryCache, boolean isFirstResource) {
return false;
}
})
.centerCrop()
.error(d)
.into(new BitmapImageViewTarget(view.getImageView()) {
@Override
protected void setResource(Bitmap resource) {
super.setResource(resource);
view.setImageBitmap(resource);
wallPaperBitmap = resource;
System.out.println(resource);
}
});
}
的Android不能加载出现在subreddit上的每一个图像。发生这种情况时,我下载下一张图片。在今天的运行中,它将加载此图像http://imgur.com/HOSg2FC,称为例外,然后加载此代码将按预期方式运行OnCreate,该代码将按预期方式运行。它运行,遇到异常,再次调用displayImages()并设置正确的图像。 (请让我知道,如果有更好的方法来做到这一点)
的onResume /在onStart是问题所在。代码将运行,遇到异常,将错误绘制为可绘制,再次调用displayImages,但不更改imageview。 setResource(位图资源)也会给我正确的位图,但不会让我更新imageview。
基本上,它冻结的ImageView到错误绘制,或在空白屏幕中,如果没有绘制,不会让我改变它。
调用的onResume用下面的代码:
if(wallPaperBitmap != null) {
view.setImageViewPicture(wallPaperBitmap);
//view.showButtons();
System.out.println("bitmap != null");
}
else {
retrieveImage(SubReddit.Earth);
System.out.println("bitmap = null");
}
将设置正确的画面。
我想,也许这样我试着用diskcachestrategy.none但这并没有帮助,这可能是与缓存的问题。作为最后的手段,一旦setResource被更新后的位图调用,或者只是使用Picasso,我可能会刷新屏幕,但我宁愿避免这种情况。
任何帮助表示赞赏!
编辑:我也遇到了错误:d/Skia的:--- SkImageDecoder ::厂空在onStart
返回
滑翔可以在onStart重新启动失败的请求,这将触发故障,则设置错误可绘制。为了解决这个问题,你应该做两件事情:
调用setImageResource/setImageDrawable自己(外
onResourceReady
)之前,请务必呼吁View
S和Target
小号clear()
。调用clear()
将防止滑行从管理该View
/Target
,这反过来将无法重新启动处理通信负载停止滑行。如果你继续通过滑翔(加载的资源的引用通常是
Bitmap
或Drawable
,你需要确保以空出你的参考,当Target
的onLoadCleared
或onLoadFailed
方法被调用,这ISN“ t直接关系到这个问题,但是它在上面的代码中是错误的,并且如果Glide在引用它时重新使用了Bitmap,则会导致奇怪的错误