上传图片步骤中,把选中的图片存本地的方法耗时如何处理?

发布于 2022-09-02 01:17:56 字数 522 浏览 25 评论 0

for (int i=0;i<paths.size();i++) {
        Bitmap bitmap = ImageCompressUtil.compressBySize(paths.get(i), 1000, 1000);
        ImageTools.savePhotoToSDCard(bitmap, Constants.MyAvatarDir, i + "");
        newPaths.add(Constants.MyAvatarDir + i + ".jpg");
    }

代码如上,paths为一个选中图片地址的list,现在我遍历他,进行压缩,以1、2、3数字来命名,并存入本地,在将压缩后的地址存入newpaths中,传入adapter显示。

现在出现了个问题,选中的图片还没来得及存入本地,覆盖原本以1、2、3数字来命名的图片,就传入adapter中,所以显示的图片是上次存的图片。

我的解决方法是延迟500ms后才传入adapter,显然这不是最好的方法,望大神们提供更加完美的解决方案。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

本王不退位尔等都是臣 2022-09-09 01:17:56

这得看你在哪里setAdapter和notifyDataSetChanged 了,如果和上面的代码块处于不同的线程,就可能会出现你的情况了,应该是上面的代码块执行结束再调adapter刷新方法,这点要确保。

﹏雨一样淡蓝的深情 2022-09-09 01:17:56

你可以用观察者模式,给你的ImageTools.savePhotoToSDCard方法传入一个Listener,

Interface OnSavePhotoToSDCardListener {
    void onSaveSucceed();
    void onSaveFailed();
}

所以代码应该改成这样

for (int i=0;i<paths.size();i++) {
        final int token = i;
        Bitmap bitmap = ImageCompressUtil.compressBySize(paths.get(i), 1000, 1000);
        ImageTools.savePhotoToSDCard(bitmap, Constants.MyAvatarDir, token + "", new OnSavePhotoToSDCardListener() {
            @Override
            public void onSaveSucceed() {
                newPaths.add(Constants.MyAvatarDir + token + ".jpg");
            }
            
            @Override
            public void onSaveSucceed() {
                //do something
            }
        });
    }

当然,建议你正确处理setAdapteradapter.notifyDataSetChanged()调用的时机。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文