`
rensanning
  • 浏览: 3548714 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:38149
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:607315
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:682337
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:89355
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:401853
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:69695
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:91723
社区版块
存档分类
最新评论

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

阅读更多
数据的保存

这篇我们来说说在应用中使用的数据,在程序终了后也能保存的方法。具体就是在我们的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。

文件的保存

在上边的例子中,我们通过使用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)方法。上边的例子中大家可以看到具体的用法。

图像的保存

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

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

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

当然也可以通过这样的方法,将图像以文件的形式保存。

2
0
分享到:
评论
2 楼 rensanning 2012-03-16  
比如:
Titanium.Filesystem.applicationDataDirectory
Titanium.Filesystem.applicationDirectory
Titanium.Filesystem.applicationSupportDirectory
Titanium.Filesystem.externalStorageDirectory
Titanium.Filesystem.resourcesDirectory
Titanium.Filesystem.tempDirectory
1 楼 fxxd1212 2012-03-16  
呵呵,这里我们通过resourcesDirectory来指定文件路径,相应的其他的可读写路径,Titanium也提供了很多种,大家可以查查API。
这句话怎么理解呀?

相关推荐

    Pro Android 2

    - **Titanium Mobile**:虽然标签中出现了“iPhone”,但本书实际上并未涉及iPhone开发,而是介绍了如何使用Titanium Mobile框架跨平台开发Android应用。 ##### 4. 实战案例分析 - **游戏开发**:通过具体案例介绍...

    Building Cross-Platform Apps

    Titanium Mobile是一个由Appcelerator公司创建的开源框架,它允许开发者使用JavaScript编写应用程序,并将其编译成原生iOS、Android以及Windows Mobile平台的代码。使用Titanium,开发者可以访问iOS和Android设备的...

    titanium-jasmine:Titanium-Jasmine使用Pivotal的Jasmine作为核心测试框架为Appcelerator的Titanium Mobile应用程序提供测试

    茉莉花Titanium- 使用作为核心测试框架,为应用程序提供测试。这个怎么运作将您来之不易JavaScript技能转换为本机应用程序,这些本机应用程序的性能和外观就像是用Objective-C(iPhone和iPad)或Java(Android)编写...

    titanium-paypal:with将PayPal iOS-SDK 2.x与Titanium Mobile一起使用

    Ti.PayPal是一个开源项目,旨在支持Appcelerator的Titanium Mobile中的PayPal iOS-SDK2.x。 该模块当前支持以下API: 简单付款 未来付款 商家配置 注意:这是Ti.PayPal的iOS版本。 您可能需要检查以获取Android...

    Pro Android 2(第二版)

    - Titanium Mobile是一个跨平台移动应用开发框架,允许开发者使用JavaScript编写代码,然后编译成原生应用。 - 本书探讨了如何利用Titanium Mobile框架进行Android应用开发,提供了实用的指导和案例分析。 #### ...

    titanium-cache:Titan缓存为Appcelerator的Titanium Mobile应用程序提供缓存

    这个怎么运作将您来之不易JavaScript技能转换为本机应用程序,这些本机应用程序的性能和外观就像是用Objective-C(iPhone和iPad)或Java(Android)编写的。 移动应用程序通常通过Internet执行请求以从API中获取数据...

    TiWebViewUserAgent:设置 Ti.UI.WebView 的用户代理

    TiWebViewUserAgent 该Module 用于自定义WebView 的UserAgent。... Titanium Mobile SDK 1.8) android/ -- TiWebViewUserAgentAndroid 执照 麻省理工学院执照 版权所有 2012 成田智也 推特:@harukazepc

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    NativeApp 使用传统原生态Android SDK来实现的应用 WebApp 基于浏览器来实现的一种应用 HybridApp 一种可以下载的Native App,其用户界面的全部或者部分元素在嵌入式浏览器组件(WebView之类的)里面运行 优雅降级...

    fitnessApp:钛金移动健身应用

    "fitnessApp:钛金移动健身应用"是一款专为iPhone和Android设备设计的健身移动应用程序,它利用Titanium Mobile平台开发而成。Titanium Mobile是一个强大的框架,允许开发者使用JavaScript语言来构建原生的移动应用,...

    sublime-ti-build:Sublime Text 2中的Appcelerator Titanium CLI的构建脚本

    快速构建并运行Titanium项目(android,iphone,mobileweb) 部署到设备时,将iOS供应配置文件拉入下拉列表 合金TSS文件的语法突出显示 自动补全(感谢Tita插件) 清理构建目录 安装 最好的安装方法是对Sublime ...

    ti.S3FileTransferManager:适用于AWS S3文件传输管理器的Titanium模块包装器

    此Titanium模块尝试包装AWS Mobile SDK的S3文件传输部分。 它主要用于内部项目,因此可以满足我们的特定要求。 当前,它具有以下限制: 仅适用于iOS(可能已计划安装Android……) 仅上传 当前仅支持未经身份...

Global site tag (gtag.js) - Google Analytics