За FLASH:
За да запазите данни локално с Flash, можете да използвате един от 3 начина:кеш на Flash Player, SharedObject , или FileReference обект. А за вашия локален файл забравете PHP и MySQL, защото говорим само за данните, които сте получили (json, xml, txt, ...).
- Кеш на Flash Player:
Трябва да знаете, че по подразбиране flash player поставя локално копие на вашия файл в своя кеш. Можете да използвате това локално копие като офлайн източник на вашите данни, но тук не забравяйте, че flash player не е запазил последната версия на вашия отдалечен файл, а първата и този http://www.example.com/data.php е различно от http://www.example.com/data.php?123 дори и да е един и същ файл! За повече подробности относно това, разгледайте моя отговор на този въпрос .
- SharedObject :
Не знам размера на заредените ви данни, но както каза Adobe за SharedObject :
Мисля, че това не се използва за големи файлове и не се препоръчва да се съхраняват файлове, а някои прости данни. Разбира се, като бисквитка за браузъра, SharedOject се нуждае от оторизация на потребителя за запис на данни на твърдия диск и потребителят може да ги изтрие по всяко време.
- Препратка към файла:
Мисля, че това е най-добрият начин да направите това, което търсите. Трябва да знаете, че за да запазите файл с помощта на FileReference, вашият потребител е поканен да избере файл за запис на данни и да го прочете за втори път. Така че, ако не искате никакво взаимодействие на потребител с вашето приложение, забравете този начин.
FileReference, използвайки пример:
var local_file_name:String = 'local.data',
file:FileReference = new FileReference(),
local_file_filter:FileFilter = new FileFilter('local data file', '*.data'),
remote_data_url:String = 'http://www.example.com/data.php',
url_request:URLRequest,
url_loader:URLLoader,
connected:Boolean = true;
if(connected){
get_remote_data();
} else {
get_local_data();
}
function get_remote_data(): void {
//we use a param to be sure that we have always the last version of our file
url_request = new URLRequest(remote_data_url + ('?' + new Date().getTime()));
url_loader = new URLLoader();
url_loader.addEventListener(Event.COMPLETE, on_data_loaded);
url_loader.load(url_request);
}
function get_local_data(): void {
// show the select dialog to the user to select the local data file
file.browse([local_file_filter]);
file.addEventListener(Event.SELECT, on_file_selected);
}
function on_data_loaded(e:Event): void {
var data:String = e.target.data;
// if the remote data is successfully loaded, save it on a local file
if(connected){
// show the save dialog and save data to a local file
file.save(data, local_file_name);
}
// use your loaded data
trace(data);
}
function on_file_selected(e:Event): void {
file.addEventListener(Event.COMPLETE, on_data_loaded);
file.load();
}
Този код ще се показва всеки път, когато диалогов прозорец за запазване на потребителя, разбира се, това е само извадка, трябва да го адаптирате към вашите нужди...
РЕДАКТИРАНЕ
За ВЪЗДУХ:
С AIR нямаме нужда от обект FileReference, вместо това използваме Файл и FileStream обект за запазване на данни :
// for example, our local file will be saved in the same dir of our AIR app
var file:File = new File( File.applicationDirectory.resolvePath('local.data').nativePath ),
remote_data_url:String = 'http://www.example.com/data.php',
data_url:String = remote_data_url,
url_request:URLRequest,
url_loader:URLLoader,
connected:Boolean = true;
if(!connected){
// if we are not connected, we use the path of the local file
data_url = file.nativePath;
}
load_data();
function load_data(): void {
url_request = new URLRequest(data_url);
url_loader = new URLLoader();
url_loader.addEventListener(Event.COMPLETE, on_data_loaded);
url_loader.load(url_request);
}
function on_data_loaded(e:Event): void {
var data:String = e.target.data;
if(connected){
// save data to the local file
var file_stream:FileStream = new FileStream();
file_stream.open(file, FileMode.WRITE);
file_stream.writeUTFBytes(data);
file_stream.close();
}
trace(data);
}
Надявам се, че това може да помогне.