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,则不会再次下载使用缓存中的相同图像。
- 快
- 简单
- 易于使用
- 它有很多功能,如内存缓存和文件缓存,默认图像在没有服务器响应时,您可以使用进度条直到图像需要时间下载,在 ListView 和 RecyclerView 中快速反映。
我终于找到了答案。我认为通过我已经完成的编码,Target 对象不会被视为垃圾。不幸的是我错了,我不得不添加这行代码以使其稳定和正确。我在这里添加它以供与我有相同问题的其他人使用:
relative_layout.setTag(target);
我使用这些代码行(我正在使用 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,则不会再次下载使用缓存中的相同图像。
- 快
- 简单
- 易于使用
- 它有很多功能,如内存缓存和文件缓存,默认图像在没有服务器响应时,您可以使用进度条直到图像需要时间下载,在 ListView 和 RecyclerView 中快速反映。
我终于找到了答案。我认为通过我已经完成的编码,Target 对象不会被视为垃圾。不幸的是我错了,我不得不添加这行代码以使其稳定和正确。我在这里添加它以供与我有相同问题的其他人使用:
relative_layout.setTag(target);