我使用这些代码行(我使用毕加索库)下载图像并将其加载到RelativeLayout的背景中。
Target target = new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
relative_layout.setBackground(new BitmapDrawable(getResources(), bitmap));
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
relative_layout.setBackgroundResource(R.drawable.blolo);
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
relative_layout.setBackgroundResource(R.drawable.blolo);
}
};
Picasso.with(this)
.load("http://i.imgur.com/D3IBDDS.jpg")
.into(target);
事情是,当我第一次使用我的模拟器运行应用程序时,一切正常。问题是,下次我运行应用程序它永远不会工作,背景永远不会改变。我可以向你保证,我不会改变代码中的任何内容。我只需按下再次运行应用程序。但是,如果我更改了一行代码,例如我发表了一些评论,例如:// blah blah,如果我按下运行即使评论没有功能,它也会再次起作用。和以前一样,如果我再次按下运行应用程序而不对代码进行任何更改,则背景永远不会改变。有没有错误或我闹鬼?
编辑: 在一些logchat输出后我发现第一次运行应用程序时,logchat显示onBitmapLoaded()运行并且一切正常。其他时候我运行应用程序logchat显示onPrepareLoad()运行并将背景设置为我的占位符因为此问题 W /设置:设置airplane_mode_on已从android.provider.Settings.System移至android.provider.Settings .Global,返回只读值。
答案 0 :(得分:1)
我终于找到了答案。我认为通过编码我已经完成了Target对象不会被视为垃圾。不幸的是我错了,我不得不添加这行代码以使其稳定和正确。我在这里添加它给其他与我有同样问题的人:
relative_layout.setTag(target);
答案 1 :(得分:0)
请确保您已禁用“即时运行”,因为这会导致代码无法正常刷新的问题。
如果您仍然遇到此问题,请转到File -> Invalidate Caches / Restart...
,然后重新启动Android Studio。
答案 2 :(得分:0)
最好使用AQuery在运行时从网址获取/下载图片
app level gradle entry **编译'com.googlecode.android-query:android-query:0.24。** 3'
使用方法:
ImageView img= (ImageView) findViewById(R.id.image);
AQuery aQuery = new AQuery(img);
aQuery.id(img).image("http://i.imgur.com/D3IBDDS.jpg",true, true);
在第二个参数中,两个布尔值代表文件缓存和内存缓存,如果您的图像视图第二次使用相同的 URL ,则不会再次下载,它将使用缓存中的相同图像。