重新打开 activity 后,ImageView 未更新为新的 URL
ImageView not Updating with new URL after activity is reopened
有简单的活动 A 和 B。Activity A 启动 Activity B,我可以 select 一张图片作为个人资料图片,首先我会将其上传到服务器,然后然后通过收到的 url 显示图像。起初,当我切换到 activity B 时,一切正常,如果已经下载了图像,它会显示在图像视图中,或者将被下载并显示。在这种情况下,如果我 select 其他图像上传,它工作正常,图像视图将显示新图像。当我退出 activity 并重新启动它时,会显示之前下载的图像(如果存在),但上传到服务器的任何新图像都不会显示,甚至连可绘制对象也不会显示。在我再次退出 activity 并重新启动它之前,图像视图根本不会更新,在这种情况下,将显示之前上传的图像,但不会再显示新图像。总而言之,第一次一切正常,但下一次图像只正确加载一次。
我一直在使用 Glide 和 Frisco,并认为问题是由它们引起的,但后来使用简单的 ImageView 和简单的连接来下载位图,结果是一样的。它只工作一次。
我一直在诺基亚 6.1 plus Android 9 和 Nexus 5x Android 8.1 以及带有 Android 8.1 和 Android 9 的模拟器上进行测试。我已经还尝试了发布版本和 same.In 添加,我正在使用 AndroidX 并且下载图像和加载它们的策略与我以前的项目相同,我以前从未遇到过这个问题.
在加载图像之前和之后尝试了以下这些方法,但没有用。
使用 Glide 和 Frisco,缓存也被禁用。 url 是完全随机的,所以他们甚至没有机会缓存它们。
这是一个示例下载和加载,它只是临时的。
image.setImageResource(0);
image.setImageBitmap(null);
image.invalidate();
new Thread(new Runnable() {
@Override
public void run() {
Bitmap bmp = null;
try {
trustEveryone();
URL url = new URL(user.image_address);
bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
Bitmap finalBmp = bmp;
ProfileActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
_profileImage.setImageBitmap(null);
_profileImage.setImageResource(0);
_profileImage.invalidate();
_profileImage.setImageBitmap(finalBmp);
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
- 在使用以下方法之前,在迁移到 androidX 之前在我的备份项目上对其进行了测试,结果是一样的,所以问题不是因为 androidX
所以这是解决方案。活动顺序:Main->Profile->Gallery->Crop->Back to Profile
return 从 Crop 到 Profile 的结果我正在使用事件总线,它必须在 UI 线程上 运行,所以 Activity 用于 运行On UI... 到 post 事件是 CropActivity,在事件 posted 之后完成,虽然我使用 ProfileActivity.runOnUI ...从事件总线接收事件时加载图像,整个代码在 CropActivity 上 运行 所以我使用另一种解决方法将结果发送回之前的 activity 并且解决了这个问题没有需要使图像无效或将图像设置为空。
有简单的活动 A 和 B。Activity A 启动 Activity B,我可以 select 一张图片作为个人资料图片,首先我会将其上传到服务器,然后然后通过收到的 url 显示图像。起初,当我切换到 activity B 时,一切正常,如果已经下载了图像,它会显示在图像视图中,或者将被下载并显示。在这种情况下,如果我 select 其他图像上传,它工作正常,图像视图将显示新图像。当我退出 activity 并重新启动它时,会显示之前下载的图像(如果存在),但上传到服务器的任何新图像都不会显示,甚至连可绘制对象也不会显示。在我再次退出 activity 并重新启动它之前,图像视图根本不会更新,在这种情况下,将显示之前上传的图像,但不会再显示新图像。总而言之,第一次一切正常,但下一次图像只正确加载一次。 我一直在使用 Glide 和 Frisco,并认为问题是由它们引起的,但后来使用简单的 ImageView 和简单的连接来下载位图,结果是一样的。它只工作一次。
我一直在诺基亚 6.1 plus Android 9 和 Nexus 5x Android 8.1 以及带有 Android 8.1 和 Android 9 的模拟器上进行测试。我已经还尝试了发布版本和 same.In 添加,我正在使用 AndroidX 并且下载图像和加载它们的策略与我以前的项目相同,我以前从未遇到过这个问题.
在加载图像之前和之后尝试了以下这些方法,但没有用。 使用 Glide 和 Frisco,缓存也被禁用。 url 是完全随机的,所以他们甚至没有机会缓存它们。 这是一个示例下载和加载,它只是临时的。
image.setImageResource(0);
image.setImageBitmap(null);
image.invalidate();
new Thread(new Runnable() {
@Override
public void run() {
Bitmap bmp = null;
try {
trustEveryone();
URL url = new URL(user.image_address);
bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
Bitmap finalBmp = bmp;
ProfileActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
_profileImage.setImageBitmap(null);
_profileImage.setImageResource(0);
_profileImage.invalidate();
_profileImage.setImageBitmap(finalBmp);
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
- 在使用以下方法之前,在迁移到 androidX 之前在我的备份项目上对其进行了测试,结果是一样的,所以问题不是因为 androidX
所以这是解决方案。活动顺序:Main->Profile->Gallery->Crop->Back to Profile return 从 Crop 到 Profile 的结果我正在使用事件总线,它必须在 UI 线程上 运行,所以 Activity 用于 运行On UI... 到 post 事件是 CropActivity,在事件 posted 之后完成,虽然我使用 ProfileActivity.runOnUI ...从事件总线接收事件时加载图像,整个代码在 CropActivity 上 运行 所以我使用另一种解决方法将结果发送回之前的 activity 并且解决了这个问题没有需要使图像无效或将图像设置为空。