1

我在我的空气中为以下函数中的 android 应用程序创建了一个 sqlite db:

protected function createDatabase():void{

        _sqlConnection = new SQLConnection();
        _sqlConnection.addEventListener(SQLEvent.OPEN, openHandler); 
        _sqlConnection.addEventListener(SQLErrorEvent.ERROR, errorHandler); 

        var _sqlFolder:File = File.applicationStorageDirectory; 
        var _sqlFile:File = _sqlFolder.resolvePath("RouteLog.db");          

        _sqlConnection.open(_sqlFile); 
}

我可以成功地创建表、插入和选择,但是每次我从 flash cs5.5 重新发布应用程序时,数据库都会被覆盖并且所有数据都会丢失。完全被难住了,欢迎任何想法!

干杯

[编辑]

所以,我通过 USB 直接从 flash pro 发布调试版本。当应用程序初始化时,它会调用上面的方法,在接收到 OPEN 事件时,它会使用以下 SQL 语句创建一个表

var SQL:String =            
            "CREATE TABLE IF NOT EXISTS myRoutes (" +
            "id INTEGER PRIMARY KEY AUTOINCREMENT, " +
            "name STRING, " + 
            "created DATE, " + 
            "duration NUMBER, " + 
            "waypoints OBJECT, " + 
            "avgSpeed NUMBER, " +
            "distance NUMBER, " +
            "rating NUMBER" + ")";

然后我可以运行一些操作、插入、选择等,一切都按预期进行。如果我退出并重新启动应用程序,以前的数据集是完整的,但是当我从闪存重新发布时,以前版本中存储的任何数据都消失了。

根据文档 SQLConnection.open() 将打开与参数中提供的文件的连接,如果它不存在,它将创建一个...

4

2 回答 2

0

在对 adobe 论坛进行进一步研究后,我认为答案是当从 Flash Pro 重新发布时,您无法防止存储在 applicationStorageDirectory 中的文件被覆盖。

即时构建的应用程序使用地理定位作为核心功能,因此我需要一个真实的数据集才能使用。最终对我有用的解决方案是将数据库从 applicationStorageDirectory 复制到documentsDirectory(sd卡),同时我仍在开发应用程序(如果它进入市场,将删除它)。

于 2012-02-16T23:36:51.627 回答
0

根据 flash.filesystem.File 的 AS3 参考:

卸载 AIR 应用程序时,卸载程序是否删除应用程序存储目录及其文件取决于平台。

因此,如果您手动卸载应用程序然后再次将其推送到设备,您可能会遇到该问题。有关步骤的更多详细信息将有所帮助,因为我肯定在应用程序发布到 Android 设备之间存在数据(尽管我使用的是 Flash Builder)。

于 2012-02-15T02:54:02.687 回答