我是一名新手程序员,所以我很抱歉这可能是一个非常棒的问题。 我对我即将创建的项目有疑问。我搜索了谷歌并且不知道正确的关键字,所以我还没有找到任何答案。
所以,这就是:我将创建一个使用Adobe AIR开发的Android应用程序。该应用程序将显示商场中的广告和商店列表。我想通过连接到网站更新广告(因为这会定期更改),只有在有更新(数据库已更改)和有可用的互联网连接时。因此,如果没有可用的互联网连接,该应用程序将不会更新并将使用旧数据 - >所以用户仍然可以离线使用该应用程序。
所以在我看来,我需要在.apk中存储一些文件(图像和文本)。这些文件将在应用程序脱机时使用,并在应用程序更新时被替换。那可能吗?我该怎么做?我希望你们能给我一些开明的方向。 :d
提前致谢。
答案 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>