多选本地相册中的图片并展示(仿QQ空间动态发送页面)上传至服务器

最近公司项目需要从本地上传图片到服务器,直接去找才发现安卓居然还有这么坑的时候,调用原生的只能选择一张图片,而且还没有任何的细节优化,触摸图片就直接返回了。这肯定不行啊!于是就在网上找啊找。。。找啊找。。。有很多都写得花里胡哨的看不懂,而且界面的UI也是low的不行。。终于还是找到一个很好的demo,仿照QQ空间的样式。哎,这就很舒服。在此贴上来给自己一个提醒。

参照上一篇博客直接作为moudle导入使用才是真的美滋滋~~


http://www.cnblogs.com/linjzong/p/4629800.html


前段时间在做一个动态发布功能,需要用到图片上传。一开始直接调用的系统相册和相机,由于系统相机不支持多选,就花点时间做了个本地相册,在此开源下。

先上截图,依次为选择相册界面、相册详情界面、查看图片大图界面

多选本地相册中的图片并展示(仿QQ空间动态发送页面)上传至服务器_第1张图片 多选本地相册中的图片并展示(仿QQ空间动态发送页面)上传至服务器_第2张图片 多选本地相册中的图片并展示(仿QQ空间动态发送页面)上传至服务器_第3张图片

相册列表按图片数量降序排序,相册详情列表按图片时间降序排序,对比了下微信和QQ的相册,读取的文件基本一致。

接下来说下相册文件遍历的思路。首先肯定不会是通过文件夹逐级遍历的,这样效率太低。查了下API发现Android的系统数据库已经存储了所有的图片路径和缩略图路径(如果有),可直接通过ContentProvider来获取,获取大图的URI是

MediaStore.Images.Media.EXTERNAL_CONTENT_URI

获取缩略图的URI是

MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI

我的做法是先遍历所有大图,获取ID和路径,再通过大图的ID去查找缩略图路径,在相册中显示的都是缩略图,这样可以提高显示速度,同时减少内存开销。但是通过大图ID去查找缩略图这一步是需要消耗一点时间的,因此将它在App启动时,开启线程执行。LocalImageHelper类用以执行该操作。

待完善点:相册的初始化是放在应用启动时,初始化一次后就不再重新执行,因此假如在应用开启后,设备内添加了新的图片或删除了图片,应用内缓存的相册仍然不会改变,下一步可以在每次打开相册时和本地图片做一次对比,对新增的和删除的图片做一个更新。

Demo中使用了ImageLoader库来展示图片,使用的是Android Studio开发。

 

GitHub地址:https://github.com/LinJZong/LocalAlbum.git



demo中onActivityResult方法里:




pathList就是我定义的一个集合用来存读到的原图的物理地址,因为展示的时候是缩略图但是你给服务器发送的话肯定要传大图,两个log的打印如下:



拿到地址之后写了个updateImage(String descript, List list)方法

第一个参数是用来获取发送动态的EditText里的内容,第二个list就是pathList




然后通过pathList去循环的创建新的图片File对象存到一个list里面去发给服务器

params.setMultipart(true);

这句话一定要有,因为xutils的原理还是去模仿了浏览器表单的样式去给服务器发送(目前我是这么理解的),所以不设置为true的话服务器是不能接受文件的哟~~

你可能感兴趣的:(多选本地相册中的图片并展示(仿QQ空间动态发送页面)上传至服务器)