我在以下函数中为Android app创建了一个sqlite数据库:
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()将打开与参数中提供的文件的连接,如果它不存在,它将创建一个...
答案 0 :(得分:0)
根据flash.filesystem.File的AS3参考:
卸载AIR应用程序时,卸载程序是否删除应用程序存储目录及其文件取决于平台。
因此,如果您手动卸载应用程序然后再将其推送到设备,则可能会遇到此问题。关于这些步骤的更多细节将有所帮助,因为我确实在应用程序发布到Android设备之间存在数据(尽管我使用的是Flash Builder)。
答案 1 :(得分:0)
在对adobe论坛进行进一步研究后,我认为答案是,当从Flash Pro重新发布时,您无法阻止存储在applicationStorageDirectory中的文件被覆盖。
app im building使用Geolocation作为核心功能,因此我需要一个真正的数据集来使用。最终对我有用的解决方案是将数据库从applicationStorageDirectory复制到documentsDirectory(sd卡),同时我还在开发应用程序(如果它进入市场将删除它)。