मेरे पास एक ऐप है जो उपयोगकर्ता को सूचनाएं प्रदर्शित कर रहा है। ये जानकारी एक एक्सएमएल फ़ाइल में हैं, सीधे ऐप में एम्बेड की गई हैं। प्रत्येक वर्ष, मुझे xml फ़ाइल में जानकारी अपडेट करनी होती है और इसलिए, मुझे Google Play Store और Apple Store के माध्यम से एक नया ऐप अपडेट सबमिट करना होता है।

मैंने एक तरीका सोचा, शायद, सभी ऐप को अपडेट करने से बचें।

मैं सोच रहा था कि ऐप, प्रारंभ करते समय, 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://****.vps.ovh.ca/horaires3.xml");
;
// Define the URLLoader.
    var loader_local:URLLoader = new URLLoader();
    var loader_online:URLLoader = new URLLoader();



loader_local.load(url_local);
loader_online.load(url_online);
    


// Listen for when the file has finished loadingloader_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
{
    // The output of the text file is available via the data property
    // of URLLoader.
     trace("size: " + (URLLoader(e.target).bytesTotal));
    size_of_horaires_local = URLLoader(e.target).bytesTotal; 
    
}



function loader_online_Complete(e:Event):void{
    // The output of the text file is available via the data property
    // of URLLoader.
     trace("size: " + (URLLoader(e.target).bytesTotal));
    size_of_horaires_online = URLLoader(e.target).bytesTotal;
    check_if_size_different();
    
}

function check_if_size_different():void{
    trace("checking if size is different");
    if(size_of_horaires_local == size_of_horaires_online){
        trace("do nothing");
        log_txt.text="Do nothing, same size. Copy File to specific path";   
        dontWait = true;
    //do nothing
    }else{
        log_txt.text="download the new xml file";
        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();
}

 

function writeFile():void {

fileStream.open(file, FileMode.WRITE);
fileStream.writeBytes(fileData, 0, fileData.length);
fileStream.close();
    wait = false;
    dontWait = true;
    introFinish(null);
    //log_txt.text="The new XML file is written here : "+file.url;
    trace("The new XML file is written here : "+file.url);

}
}

ऐसा लगता है कि नई xml फ़ाइल का "पथ" गलत है। मुझे ऐप में एम्बेड किए गए पुराने एक्सएमएल को लिखने और बदलने का कोई तरीका नहीं मिल रहा है।

कोई विचार अगर यह करने योग्य है?

0
user5870211 18 पद 2020, 07:34

1 उत्तर

सबसे बढ़िया उत्तर

मुझे विश्वास नहीं है कि आप उन फ़ाइलों को अधिलेखित कर सकते हैं जिन्हें आपके ऐप में बंडल किया गया था।

एक संभावित समाधान एक्सएमएल को एक नई स्थानीय एक्सएमएल फाइल में लिखना है और इसे दस्तावेज़ निर्देशिका या ऐपस्टोरेज डायरेक्टरी में सहेजना है और एक संस्करण संख्या को नोड के रूप में शामिल करना है।

public static var _xmlFile:File = File.documentsDirectory.resolvePath("yourapp.xml");

private static const _initialXML:String = "<?xml version='1.0' encoding='UTF-8'?><contents><version>100</version></contents>";

//only write to local on first launch                 
if(!_xmlFile.exists){
_writeFileStream.open(_xmlFile, FileMode.WRITE);
_writeFileStream.writeUTFBytes(_initialXML);        
_writeFileStream.close();
} 

फिर जब भी ऐप लॉन्च होता है तो यह स्थानीय एक्सएमएल के साथ-साथ सर्वर से नए एक्सएमएल में लोड होता है, संस्करण संख्याओं की तुलना करता है और यदि आवश्यक हो तो सर्वर संस्करण के साथ स्थानीय संस्करण को ओवरराइट करता है।

ऐप तब इसके कॉन्फ़िगरेशन के लिए स्थानीय संस्करण का उपयोग करता है।

0
crooksy88 18 पद 2020, 09:17
ऐसे डेटा को संग्रहीत करने के लिए File.applicationStorageDirectory सही फ़ोल्डर है, क्योंकि File.documentsDirectory को उपयोगकर्ता द्वारा एक्सेस और संशोधित किया जा सकता है।
 – 
Organis
18 पद 2020, 11:50