我有一個應用程式,正在向用戶顯示資訊。這些資訊是在一個xml檔案中,直接嵌入到應用程式中。 每年,我都要更新xml檔案中的資訊,因此,我必須通過Google Play Store和Apple Store提交一個新的應用程式更新。
我想到了一個方法,也許可以避免更新所有的應用程式。
我在想,如果應用程式在啟動時,檢查 xml 檔案的檔案大小和我在服務器上的 xml 檔案的檔案大小。 如果大小相同,該檔案將不會被下載/替換。 如果大小不同,該檔案將被下載,并將取代當前的xml檔案。
問題 :
如果我的應用程式的大小不一樣,就會被下載,并取代當前的xml檔案。
我已經嘗試這樣做了,但是沒有成功 :
function checking_Files() :void
{
var size_of_horaires_local;
var size_of_horaires_online;
var url_local:URLRequest = new URLRequest("horaires3.xml")。
var url_online:URLRequest = new URLRequest("http://_01.vps.ovh.ca/horaires3.xml")。
;
// 定義URLLoader。
var loader_local:URLLoader = new URLLoader();
var loader_online:URLLoader = new URLLoader();
loader_local.load(url_local);
loader_online.load(url_online);
// 聽取檔案何時完成加載loader_local_Complete
loader_local.addEventListener(Event.COMPLETE, loader_local_Complete)。
loader_online.addEventListener(Event.COMPLETE, loader_online_Complete)。
function loader_local_Complete(e:Event):void
{
// 文本檔案的輸出可以通過URLLoader的資料屬性獲得。
// URLLoader的資料屬性。
trace("size: " (URLLoader(e.target).bytesTotal))。
size_of_horaires_local = URLLoader(e.target).bytesTotal;
}
function loader_online_Complete(e:Event):void{
// 文本檔案的輸出可以通過URLLoader的資料屬性獲得。
// URLLoader的資料屬性。
trace("size: " (URLLoader(e.target).bytesTotal))。
size_of_horaires_online = URLLoader(e.target).bytesTotal;
check_if_size_different();
}
函式 check_if_size_different():void{
trace("檢查大小是否不同")。
如果(size_of_horaires_local == size_of_horaires_online){
trace("什么都不做")。
log_txt.text="什么都不做,大小相同。復制檔案到特定路徑"。
dontWait = true;
//什么都不做
}else{
log_txt.text="下載新的xml檔案"。
download_the_new_xml();
wait = true;
log_txt.text="Récupération de données en cours..."。
}
}
function download_the_new_xml():void{
var urlString:String = "http://****.vps.ovh.ca/horaires3.xml"。
var urlReq:URLRequest = new URLRequest(urlString);
var urlStream:URLStream = new URLStream();
var fileData:ByteArray = new ByteArray();
urlStream.addEventListener(Event.COMPLETE, loaded)。
urlStream.load(urlReq)。
function loaded(event:Event):void {
urlStream.readBytes(fileData, 0, urlStream.bytesAvailable)。
寫檔案()。
}
功能 writeFile():void {
fileStream.open(file, FileMode.WRITE)。
fileStream.writeBytes(fileData, 0, fileData.length);
fileStream.close()。
wait = false。
dontWait = true。
introFinish(null)。
//log_txt.text="新的XML檔案被寫在這里:" file.url."。
trace("The new XML file is written here : " file.url);
}
}
似乎新的xml檔案的 "路徑 "是錯誤的。我無法找到一種方法來寫入并替換嵌入到應用程式中的舊 xml。
有什么辦法可以做到嗎?
uj5u.com熱心網友回復:
我不相信你可以重寫捆綁在你的應用程式中的檔案。
一個可能的解決方案是將XML寫入一個新的本地XML檔案,并將其保存在documentsDirectory或appStorageDirectory中,并包括一個作為節點的版本號。
public static var _xmlFile:File = File.documentDirectory.resolvePath("yourapp.xml");
private static const _initialXML:String = "<? xml version='1.0' encoding='UTF-8'? ><contents> <version> 100</version></contents> "。
//只在第一次啟動時寫到本地
如果(!_xmlFile.exists){
_writeFileStream.open(_xmlFile, FileMode.WRITE)。
_writeFileStream.writeUTFBytes(_initialXML);
_writeFileStream.close()。
}
當應用程式啟動時,它會加載本地 xml 以及來自服務器的新 xml,比較版本號并在必要時用服務器版本覆寫本地版本。
然后該應用程式使用本地版本進行配置。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/319507.html
標籤:
上一篇:試圖通過Websocket從JS向AS3發送壓縮的base64編碼的字串。解壓縮的問題
下一篇:AS3動態電影剪輯名稱作為變數
