Android studio Picasso 加载程序在我第一次 运行 应用程序后无法运行

Android studio Picasso loader is not working after the first time I run the app

我使用这些代码行(我正在使用 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);

问题是,当我 运行 第一次使用我的模拟器应用程序时,一切正常。问题是下次我 运行 应用程序它永远不会工作,背景永远不会改变。我可以向你保证,我不会更改 code.I 中的任何内容,只需在 app.However 中再次按 运行,如果我更改了一行代码,例如我会发表一些评论,例如:/ /blah blah 如果我按 运行 它会再次工作,即使评论没有功能。和以前一样,如果我再次按下 运行 应用程序而不对代码进行任何更改,背景永远不会改变。是不是有什么BUG或者我闹鬼了?

编辑: 在一些 logchat 输出后我发现我第一次 运行 应用程序时,logchat 显示onBitmapLoaded() 运行s 一切正常。其他时候我 运行 应用程序日志显示 onPrepareLoad() 运行s 并将背景设置为我的占位符因为这个问题 W/Settings: 设置 airplane_mode_on 已从 android.provider.Settings.System 移至 android.provider.Settings.Global,返回只读值。

请确保您已禁用 Instant 运行,因为众所周知这会导致代码无法正确刷新的问题。

如果问题仍然存在,请转到 File -> Invalidate Caches / Restart...,然后重新启动 Android Studio。

在 运行 时间

使用 AQuery 从 URL fetch/download 图片

应用级别gradle入门 **编译'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. 它有很多功能,如内存缓存和文件缓存,默认图像在没有服务器响应时,您可以使用进度条直到图像需要时间下载,在 ListView 和 RecyclerView 中快速反映。

我终于找到了答案。我认为通过我已经完成的编码,Target 对象不会被视为垃圾。不幸的是我错了,我不得不添加这行代码以使其稳定和正确。我在这里添加它以供与我有相同问题的其他人使用:

relative_layout.setTag(target);