使用Titanium Mobile开发iPhone/Android应用(09)- 数据的保存

[size=large][b]数据的保存[/b][/size]

这篇我们来说说在应用中使用的数据,在程序终了后也能保存的方法。具体就是在我们的Twitter客户端应用中,当要发送的Tweet处于编辑中的时候,即使应用终了后,编辑中的内容还能够在下次再编辑。iPhone应用中,由于用户的不经意的操作,内存的自动释放等等原因,在无意识中程序就被终了后,未保存的数据也将消失。所以保存编辑中的数据是很重要的。

首先,保存输入的Tweet的代码如下(还是在我们以前的message_window.js中追加代码):

win.addEventListener(
'close',
function(){
var text = textArea.value;
Ti.App.Properties.setString('previousText', text);
}
);

win.addEventListener(
'open',
function(){
var text = Ti.App.Properties.getString('previousText');
if ( text ) {
textArea.value = text;
}
}
);

在window关闭的时候,window中的textarea等UI控件输入的内容将会消失,所以我们在window的close事件中追加监听事件,将输入的数据进行保存。

这里我们使用的方法是Titanium.App.Properties。

Titanium.App.Properties是用来管理键值对数据的一个很方便的对象。在保存数据的时候,在Ti.App.Properties.setString相对应的Key的值中设置你要保存的值即可。相反,取值的时候,通过Ti.App.Properties.getString方法,取得你想取的Key的值。setString和getString是设置字符串的方法,类似的还有其他数据类型的方法。特别要说的是,要想原封不动的保存JavaScript对象是不可以的,你需要先通过JSON等处理,将对象序列化后再保存。

关于String以外的值,这里我们通过保存位置信息来说说:

win.addEventListener(
'close',
function(){
var text = textArea.value;
Ti.App.Properties.setString('previousText', text);

if (mapview.visible) {
var loc = mapview.location;
var locationList =
[loc.latitude,loc.longitude,loc.latitudeDelta,loc.longitudeDelta];
Ti.App.Properties.setList('locationList', locationList);
}
}
);

win.addEventListener(
'open',
function(){
var text = Ti.App.Properties.getString('previousText');
if ( text ) {
textArea.value = text;
}
if ( Ti.App.Properties.hasProperty('locationList') ) {
var locationList = Ti.App.Properties.getList('locationList');
mapview.show();
mapview.setLocation(
{
latitude : locationList[0],
longitude : locationList[1],
latitudeDelta : locationList[2],
longitudeDelta : locationList[3]
}
);
}
}
);

在这个例子中,mapview中要设置的4个关于位置的信息值,能够将其变化成数据后保存起来。原封不动保存对象是不可以的,但是如果有很多值的话,你可以其以数组的形式保存。

当我们要判断某个Key中是否有值的时候,可以使用Ti.App.Properties.hasProperty。

[size=large][b]文件的保存[/b][/size]

在上边的例子中,我们通过使用Ti.App.Properties来保存了数据。在Titanium中也能够很方便的读写文件。以下通过例子来说明如何将数据保存到文件中:
var fileName = 'tweet.txt';
win.addEventListener(
'close',
function(){
var text = textArea.value;
var loc;
if (mapview.visible) {
loc = mapview.location;
}
var json = JSON.stringify({previousText:text,location:loc});
var file = Ti.Filesystem.getFile(
Titanium.Filesystem.resourcesDirectory + '/' + fileName
);
file.write(json);
}
);

win.addEventListener(
'open',
function(){
var file = Ti.Filesystem.getFile(
Titanium.Filesystem.resourcesDirectory + '/' + fileName
);
var json = file.read();
if ( !json || json.length <= 0) {
return;
}
var data = JSON.parse(json);
var text = data.previousText;
var location = data.location;
if ( text ) {
textArea.value = text;
}
if ( location ) {
var locationList = Ti.App.Properties.getList('locationList');
mapview.show();
mapview.setLocation(location);
}
}
);

在写文件的时候需要注意的一点是:获取文件句柄的方法是Titanium.Filesystem.getFile。
其中的参数就是文件的路径。
Titanium.Filesystem.resourcesDirectory + '/' + fileName

这里我们通过resourcesDirectory来指定文件路径,相应的其他的可读写路径,Titanium也提供了很多种,大家可以查查API。

在往文件中写入对象的数据的话也一样要通过JSON来序列化。

Titanium中已经为我们提供了JSON的序列化(stringify)和反序列化(parse)方法。上边的例子中大家可以看到具体的用法。

[size=large][b]图像的保存[/b][/size]

在Tweet的编辑页面中,我们还表示了一个图像,到现在为止,我们都是通过从相册中选择出来的图片,所以图片本身就保存在相册中,但是当我们通过相机拍照的话,就需要将图片保存在相册中。
Titanium.Media.saveToPhotoGallery(image)

通过以上代码就能将image图片保存到相册中。

var file  = Ti.Filesystem.getFile(
Titanium.Filesystem.resourcesDirectory + '/' + fileName
);
file.write(image)

当然也可以通过这样的方法,将图像以文件的形式保存。
内容概要:本文档是一份关于交换路由配置的学习笔记,系统地介绍了网络设备的远程管理、交换机与路由器的核心配置技术。内容涵盖Telnet、SSH、Console三种远程控制方式的配置方法;详细讲解了VLAN划分原理及Access、Trunk、Hybrid端口的工作机制,以及端口镜像、端口汇聚、端口隔离等交换技术;深入解析了STP、MSTP、RSTP生成树协议的作用与配置步骤;在路由部分,涵盖了IP地址配置、DHCP服务部署(接口池与全局池)、NAT转换(静态与动态)、静态路由、RIP与OSPF动态路由协议的配置,并介绍了策略路由和ACL访问控制列表的应用;最后简要说明了华为防火墙的安全区域划分与基本安全策略配置。; 适合人群:具备一定网络基础知识,从事网络工程、运维或相关技术岗位1-3年的技术人员,以及准备参加HCIA/CCNA等认证考试的学习者。; 使用场景及目标:①掌握企业网络中常见的交换与路由配置技能,提升实际操作能力;②理解VLAN、STP、OSPF、NAT、ACL等核心技术原理并能独立完成中小型网络搭建与调试;③通过命令示例熟悉华为设备CLI配置逻辑,为项目实施和故障排查提供参考。; 阅读建议:此笔记以实用配置为主,建议结合模拟器(如eNSP或Packet Tracer)动手实践每一条命令,对照拓扑理解数据流向,重点关注VLAN间通信、路由选择机制、安全策略控制等关键环节,并注意不同设备型号间的命令差异。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值