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

for int i=0;i<paths.size;i++ { Bitmap bitmap = ImageCompressUtil.compressBySizepaths.geti, 1000, 1000; ImageTools.savePhotoToSDCardbitmap, Constants.MyAvatarDir, i + ""; newPaths.addConstants.MyAvatarDir + i + ".jpg"; }

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

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

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

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

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

Interface OnSavePhotoToSDCardListener { void onSaveSucceed; void onSaveFailed;
}

所以代码应该改成这样

for int i=0;i<paths.size;i++ { final int token = i; Bitmap bitmap = ImageCompressUtil.compressBySizepaths.geti, 1000, 1000; ImageTools.savePhotoToSDCardbitmap, Constants.MyAvatarDir, token + "", new OnSavePhotoToSDCardListener { @Override public void onSaveSucceed { newPaths.addConstants.MyAvatarDir + token + ".jpg"; } @Override public void onSaveSucceed { //do something } }; }

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注