Для удобства пользователя все введённые им данные желательно сохранять и восстанавливать при последующем запуске приложения. Значения будем сохранять в файле settings.json в формате JSON, который имеет простую структуру. Имя файла и его расширение мы задаём произвольно, сам файл можно открыть и внести в него изменения в любом текстовом редакторе. Вот как выглядит его содержимое.
{"activity_name":"Приседания", "activity_factor":7.9,"time":30,"weight":50, "height":170,"sex":"женский","age":26, "activity_index":137}
Здесь перечислены все наши используемые переменные с их значениями. Всё записывается в одну строку без переносов текста.
Загрузка параметров
Вначале сделаем загрузку данных из файла, заодно проверку на их существование. Для работы с форматом JSON предварительно нужно загрузить библиотеку.
local json = require("json");
Добавим свою функцию loadSettings, которая будет загружать данные из указанного файла и возвращать их в виде таблицы.
function loadSettings(filename)
-- получаем путь к файлу
local path = system.pathForFile(filename, system.ResourceDirectory);
local contents = "";
local myTable = {};
local file = io.open(path, "r"); -- открываем файл
if (file) then -- если такой файл существует
local contents = file:read( "*a" ); -- читаем из него данные
myTable = json.decode(contents); -- расшифровываем их
io.close(file); -- закрываем файл
return myTable; -- возвращаем параметры из файла
end
return nil
end
Теперь вызываем функцию loadSettings, получаем данные из файла и присваиваем значения нашим переменным.
setting = loadSettings("settings.json"); -- загружаем параметры из файла
if (setting) then
weight = setting.weight;
height = setting.height;
age = setting.age;
sex = setting.sex;
time = setting.time;
activity_index = setting.activity_index;
activity_name = setting.activity_name;
activity_factor = setting.activity_factor;
end
После загрузки параметров приложение должно вывести текст и изменить положение ползунков у слайдеров как показано на рисунке.
Вид приложения после загрузки параметров
Сохранение параметров
Для сохранения всех параметров напишем свою функцию saveSettings, похожую по своей структуре на предыдущую loadSettings.
-- Сохраняем параметры в файл
function saveSettings(t, filename)
local path = system.pathForFile(filename, system.ResourceDirectory);
local file = io.open(path, "w");
if (file) then
local contents = json.encode(t);
file:write(contents);
io.close(file);
return true
else
return false
end
end
Предварительно все данные для сохранения присваиваем таблице, а затем эту таблицу передаём в качестве параметра функциии.
settings = {};
settings.weight = weight;
settings.height = height;
settings.age = age;
settings.sex = sex;
settings.time = time;
settings.activity_index = activity_index;
settings.activity_name = activity_name;
settings.activity_factor = activity_factor;
saveSettings(settings, "settings.json");
Код самой функции размещаем внутри result.lua, соответственно, сохраняться все параметры будут только после того, как пользователь нажал на кнопку для получения результатов. Если изменены начальные данные, например, вес и рост, а приложение закрылось, то ничего не сохранится.
При сохранении файла в эмуляторе под Windows наблюдается неприятный баг — окно с выводом результатов закрывается самостоятельно. Само приложение работает корректно, сохраняет и загружает данные без всяких нареканий.
См. также
Руководство по применению формата JSON в Corona
http://coronalabs.com/blog/2011/08/03/tutorial-exploring-json-usage-in-corona/