Android工作室Picasso加载程序在我第一次运行应用程序

时间:2016-11-17 12:37:11

标签: android bitmap background relativelayout picasso

我使用这些代码行(我使用毕加索库)下载图像并将其加载到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,返回只读值。

3 个答案:

答案 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 ,则不会再次下载,它将使用缓存中的相同图像。

  1. 快速
  2. 简单
  3. 易于使用
  4. 它有很多功能,如内存缓存和文件缓存,默认图像没有服务器响应,你可以使用进度条直到图像需要时间下载,快速反映在ListView和RecyclerView。
相关问题