如何使用适用于Android的Adobe AIR应用程序存储数据并在用户手机中更新数据

时间:2014-01-22 14:46:13

标签: android actionscript-3 air

我是一名新手程序员,所以我很抱歉这可能是一个非常棒的问题。 我对我即将创建的项目有疑问。我搜索了谷歌并且不知道正确的关键字,所以我还没有找到任何答案。

所以,这就是:我将创建一个使用Adobe AIR开发的Android应用程序。该应用程序将显示商场中的广告和商店列表。我想通过连接到网站更新广告(因为这会定期更改),只有在有更新(数据库已更改)和有可用的互联网连接时。因此,如果没有可用的互联网连接,该应用程序将不会更新并将使用旧数据 - >所以用户仍然可以离线使用该应用程序。

所以在我看来,我需要在.apk中存储一些文件(图像和文本)。这些文件将在应用程序脱机时使用,并在应用程序更新时被替换。那可能吗?我该怎么做?我希望你们能给我一些开明的方向。 :d

提前致谢。

2 个答案:

答案 0 :(得分:1)

这是一个相当简单的问题需要解决。基本上,每次应用程序启动时(或用户请求)都会检查更新。您将上次更新的时间(始终以UTC格式)发送到服务器,以检查此后是否有更新。如果有,则发送新数据。如果没有,则不发送新数据或不发送新数据的状态代码。像这样:

var f:File;
var fs:FileStream;
var dataToUse:Object;

function init():void {
    f = File.applicationStorageDirectory.resolvePath("server-data.txt");
    var req:URLRequest = new URLRequest();
    req.method = URLRequestMethod.GET;
    req.data = new URLVariables();
    req.data['time'] = f.exists ? f.modificationDate.time : 0;
    req.url = "url goes here";
    var loader:URLLoader = new URLLoader();
    loader.addEventListener(Event.COMPLETE, completeHandler);
    loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
    loader.load(req);
}

function completeHandler(e:Event):void {
    // check if there was an update
    if (isUpdated) {
        saveNewData(e.target.data);
    }
    else {
        loadOldData();
    }
}

function ioErrorHandler(e:IOErrorEvent):void {
    loadOldData();
}

function saveNewData(data:String):void {
    // save the data to disk
    fs = new FileStream();
    fs.open(f, FileMode.WRITE);
    fs.writeUTFBytes(data);
    fs.close();

    //parse data here
    dataToUse = parsedData;
}

function loadOldData():void {
    if (f.exists) {
        fs = new FileStream();
        fs.open(f, FileMode.OPEN);
        var data:String = fs.readUTFBytes();
        fs.close();

        // parse data
        dataToUse = parsedData;
    }
    else {
        // display error
    }
}

这将要求服务器能够理解您发送它们的时间戳意味着什么。否则,您可以每次调用新数据并每次更新,仅在出现错误时保留旧数据。

关于我上面的示例的快速说明:我确实采取了一些快捷方式并且没有显示所有内容,例如数据解析以及如何检查是否有更新。这些是特定于服务器数据返回的内容,因此我无法真实地猜测如何处理它。

答案 1 :(得分:0)

您可以使用AIR中的文件和FileStream类来允许本地保存到Android和iPhone / iPad。您可以找到更多示例here

默认情况下,Android应用程序无权写入外部存储。有必要 为我的应用程序XML描述符文件(“YourAppName-app.xml”)设置 WRITE_EXTERNAL_STORAGE 权限。

<android>  
   <manifestAdditions>
      <![CDATA[  
         <manifest>  
             <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
         </manifest>  
      ]]>
   </manifestAdditions>  
 </android>