admin管理员组文章数量:1530521
2024年7月18日发(作者:)
第1O期 陈志伟,李天福:基于Android平台的云相册系统设计与实现 ・71・
<servlet ̄
<servlet—name>Service</serv1et—name>
<servlet—class ̄
com.server.AnywhereServer.servlet.Anywhere
Servlet
</servlet—class.>
</servlet>
 ̄servlet--mapping ̄
<serv1et—name>Service</servlet—name>
<url—pattern ̄/service.do</url-pattern ̄
</servlet—mapping>
1.3云相册数据存储
云相册服务器在接受客户端请求后,最重要的处理就
是保存数据,如将客户端发送的相片和文字进行持久化存
储。
Bigtable是最直观的GAE存储方法,被设计用于处
理海量数据。它是一个稀疏的、分布式的、持久化存储的
多维度排序映射,不支持完整的关系数据模型。相反,
Bigtable为用户提供了简单的数据模型,利用这个模型,
客户可以动态控制数据的分布和格式。尽管存在文件大
小限制的缺点,即每个文件不超过1MB,但是仍然可以使
用Bigtable来存储一些账户信息,例如注册账户、账号密
码等。
当需要存储大数据文件时,例如相片、多媒体文件,则
需要使用Blobstore存储方式。这是另一个基于<键,值
>的存储方法,它最大能够保存和显示2GB的文件。虽
然Blobstore不存在数据大小方面的问题,但它在使用上
还是存在不友好因素,即需要客户端发送两次请求:第一
次用于获得文件数据存储的URL,第二次使用上一次获
得的URL发送提交真正的数据。在这点上,不仅浪费了
用户宝贵的网络资源,同时也消耗了更多的云服务器
CPU资源。
在云相册系统中,相片数据使用Blobstore方式来存
储,其它用户数据均使用BigTable方式存储。
2系统Android客户端实现
云相册系统的客户端选用占领智能手机市场半壁江
山的Android系统平台。客户端通过网络以及调用接口
方式,实现与云服务端的数据交互,以及系统客户端具体
业务逻辑。
2.1 Android客户端与云服务器交互
云计算体系中的SOA构建层将云计算服务封装成标
准的web Service,使得云计算客户端可以使用浏览器简
单便捷地访问并使用这些服务。Android可以像浏览器
一
样,调用Web Service接口实现和云服务端进行数据传
输,通过标准化的定义服务接口,使得构建在系统中的各
种服务以统一和通用的方式进行交互,也可以直接发送
http请求和业务数据。
客户端调用web Service时,数据使用XML格式;而
直接发送http请求,则可以选择使用JSON数据格式。
XML和JSON在可读性上都同样出色。XML使用自定
义标签,意义清楚,但数据冗余较多,提供了对大规模数据
的逐步解析方案,这种方案比较适合于对大量数据的处
理;JS0N则因为语法简单,所以可读性好,解析较少的数
据时能起到良好的效果。显然,JSON是轻量级的,它易
于使用,并且容易转换到Java对象。因此,当数据较少
时,直接使用http方式发送请求效率更好。
本系统编写了一些工具类,利用这些工具类,客户端
将能够轻松实现用户登录、相片上传等具体业务,主要有:
(1)Task.java。用于创建http请求,通过构造JSON
数据格式的请求参数,设定网络请求方式,即可简单快捷
地创建网络请求任务。
(2)HttpHelp.java。用于实现3种方式发送http请
求,有直接get方式、post方式以及携带文件或者图像数
据的post方式。
(3)Worker.java。在设定回调侦听者之后,实现数据
后台异步加载并回调服务器返回的后续业务流程。
2.2注册登录模块
运行客户端之后,首先进入登陆界面。若未有登陆账
号,可以点击“注册”按钮进行注册。注册成功后,云服务
器将返回用户ID,用户使用此ID账号进行系统登录。
客户端发送请求:构建登录所需要的JSON参数,分
别为动作类别(Login)、账号以及密码。将JSON格式数
据添加到Task的参数中,然后执行Worker,即可将登录
请求发送到云服务器。服务器根据动作类别判定执行用
户登录验证流程,并返回验证结果。
同时,在worker中注册了一个侦听回调函数parse—
Data(),解析云服务器返回结果,用于判断服务器是否通
过本次登录。
2.3拍照上传模块
登录系统后,在主面板上点击“拍照上传”按钮,进入
客户端拍照上传模块,主要实现手机客户端相片数据采集
功能,然后使用手机网络服务,将数据上传到云服务端。
Android拍照可以有两种方式,第一种是直接发送命
令,调用系统拍照功能:
Intent intent—new Intent(MediaStore.ACT10N
IMAGE
—
CAPTURE);
startActivityForResult(intent,0);
在拍照完成后,得到相片数据:
Bundle extras—data.getExtras():
Bitmap b一(Bitmap)extras.get(”data”);
采用这种方式,软件稳定,无需担心各种系统问题。
但因为调用了系统相机界面,无法做到界面定制,所以用
户体验可能会相对差一些。
第二种则是通过继承SufaceView来编写自定义预览
界面,使用Camera进行数据捕获。本系统采用此种方
法,在采集页面布局文件中设定预览窗口。在onCreate
・ 72・ 软件导刊 2O13年
中取得SurfaceView为一个显示面板,并通过显示面板得
到其SurfaceView控制器,定义MySurfaceCa1lback类,重
载控制器的Callback,主要用于操作Camera API,通过控
制Camera调用底层摄像头接口,完成预览图片,拍摄图
片等功能。
mSurfaceView一(SurfaceView)findViewById(R.id.
mysurfaceview);
mSHolder—mSurfaceView.getHolder():
mSHolder.addCallback(new MySurfaceCallback());
mSHolder.setType(SurfaceHolder.SURFACE
TYPE PUSH BUFFERS):
在实际应用中,用户点击“预览”按钮时,系统将打开
摄像头,进入预览模式;点击“停止”按钮可以停止预览;点
击“摄像”按钮进行图像抓捕,若不满意图像,可以点击“放
弃”按钮重新选取画面。当用户抓拍好相片时,点击“详
细”按钮,系统弹出相关信息表单填写界面,用户可以自由
输入。最后,点击“提交”按钮将数据发送云服务器存储,
代码如下:
private void submit()
{
if(mTask.mDataExt一一null l 1 mTask.mUr1.1ength()
<1)
{
return:
}
try
{
JSONObject param—new JSONObject();
param.put(”action”,”PhotoAdd”);//上传的动作类
别
param.put(‘ euid”,Login.mEuid);
param.put(“title”,mTitle.getText().toString());
param.put(”addr”,mAddr.getText().toString());
param.put(”introduction”,mIntroduction.getText().
toString());
param.put(”detail”,mDetail.getText().toString());
//将采集的描述信息添加到json参数中
mTask.mType—Task.TYPE
POST
FILE;//携带
文件的POST方式
mTask.mEncode—Task.ENCODING_UTF8;
mTask.mParam—param:
Worker.execute(this,mTask,new Worker.TaskLis—
tener()
//使用工具类Worker提交数据
{
public void onComplete(byteE]result)
{
mTask.mDataExt—result;
parseData();//侦听回调函数,解析云服务器返
回结果
}
});
}
catch(Exception e)
{
e.printStackTrace()
finish();
}
}
2.4浏览相册模块
用户上传相片后,可以浏览回看自己的相册数据。客
户端发送浏览请求后,云服务器首先返回相册的列表数
据。为了不影响UI线程以及获得更好的用户体验,在得
到相册列表数据之后,图像才会在后台异步加载。未加载
完成前,相片区域将显示默认的本地图片。下载完成后,
系统才会通知UI更新相应的图片数据。
定义函数SetImageUrl,根据传人的图像URL,首先
判断本地缓存有没有图,有的话则显示缓存数据,否则通
过新建线程下载图像,并加入到缓存以备下次使用。这样
的缓存机制既加快了图像载人速度,也减少了网络流量的
开支,更减轻了服务器端的负载压力。
用户点击相册进入相片列表界面,如果当前浏览者是
相册的拥有者,则可以点击复选框选择一条或多条记录进
行批量删除操作。这些请求都是使用工具类来完成,只是
创建的参数以及回调函数不同。查看相册参数,动作类别
是PhotoList,另外还需要一个查询账户ID,云服务器依据
这个ID构建GQL语句检索出数据列表。查看相册某一
相片的详细信息,则无需再次发起请求,只需要在相册列
表界面,将用户选中记录的参数传给详细界面即可。这样
既可以减轻服务器的负载压力,还能减少用户等待网络数
据传输的时间,提高了用户体验性。
3 结语
云相册是移动互联网上云计算的一种创新应用,它将
传统桌面计算为核心的任务处理转变为以网络为核心的
任务处理,实现了个人相片的“即拍即存即取”功能。同
时,可考虑对系统功能进行扩展,结合SNS社交理论,利
用手机定位服务,帮助用户发现并关注身边人,促进人与
人的关系与信息交流。总之,云相册系统不仅实现了文件
存储功能,更体现了云计算“个人化”的市场应用前景。
参考文献:
[1]李德毅.云计算技术发展报告[M].北京:科学出版社,2012.
[2]冯建平,吴丽华.“云计算”技术和“云计算”服务模式——全球信息
化发展的未来[J].信息系统工程,2009(11).
[32黄婕,刘新桥.云计算环境下移动平台数据终端应用模式研究[J].
软件导刊,2013(5).
(责任编辑:孙娟)
版权声明:本文标题:基于Android平台的云相册系统设计与实现 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1721267587a868882.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论