重新打开活动后,ImageView无法使用新的URL更新

时间:2019-02-10 12:12:01

标签: java android imageview

有简单的活动A和B。活动A启动活动B,我可以选择一个图像作为个人资料图像,首先将其上传到服务器,然后通过接收的URL显示该图像。首先,当我切换到活动B时,一切正常,如果已经下载了一个图像,则该图像将显示在imageview中,否则它将被下移并显示。在这种情况下,如果我选择要上传的其他图像,则其工作正常,并且imageview将显示新图像。当我退出活动并重新启动该活动时,将显示先前下垂的图像(如果存在),但是上传到服务器的任何新图像甚至都不会显示可绘制对象。在我再次退出活动并重新启动活动之前,imageview根本不会更新,在这种情况下,将显示先前上传的图像,但不会显示新图像。综上所述,第一次一切正常,但是下一次图像只能正确加载一次。 我一直在使用Glide和Frisco,并认为问题是由它们引起的,但是随后使用了简单的ImageView和简单的连接来下载位图,结果是一样的。它只能工作一次。

我已经在诺基亚6.1,Android 9和Nexus 5x Android 8.1以及带有Android 8.1和Android 9的模拟器上进行了测试。我还尝试了发布版本,并且仍然相同。此外,我使用的是AndroidX下载图像并加载它们的策略与我以前的项目相同,而且我之前从未遇到过这个问题。

在加载图像之前和之后在下面尝试了这些操作,但无法正常工作。 使用Glide和Frisco时,缓存也被禁用。网址是完全随机的,因此它们甚至没有机会缓存​​它们。 这是一个示例下载和加载,只是临时的。

 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();

1 个答案:

答案 0 :(得分:0)

  • 在使用以下方法之前,请先在备份项目上对其进行测试,然后再迁移至androidX,它是相同的,因此问题并非出自androidX

所以这是解决方案。活动顺序:Main-> Profile-> Gallery-> Crop->返回个人资料 要将结果从Crop返回到Profile,我使用的是必须在UI线程上运行的事件总线,因此用于runOnUI ...来发布事件的Activity是CropActivity,它在事件发布后完成,尽管我使用ProfileActivity.runOnUI ...在从事件总线接收事件时加载图像,整个代码都在CropActivity上运行,因此我使用了另一种解决方法将结果发送回先前的活动,从而解决了该问题,而无需使之无效或将图片设置为空。