Сохранение данных в Corona SDK: JSON и main.lua

Сохранение и загрузка параметров приложения реализуются с использованием формата JSON, позволяя сохранять пользовательские данные (например, возраст, рост, вес) между сессиями.

Подготовка

Создайте файл settings.json в той же папке, что и main.lua. Запишите в него следующую структуру данных в формате JSON:

{
  "activity_name": "",
  "activity_factor": 0,
  "times": 0,
  "weight": 0,
  "height": 0,
  "sex": "",
  "age": 0,
  "activity_index": 0
}

Ключи представляют параметры приложения (название действия, фактор активности, время, вес, рост, пол, возраст, индекс активности), а значения — соответствующие данные. Значения можно изменить. Пробелы в файле допустимы.

Загрузка параметров

Подключите библиотеку JSON:

require "json"

Функция load_settings загружает данные из settings.json:

function load_settings(file_name)
  local path = system.pathForFile(file_name, system.ResourceDirectory)
  local content = ""
  local my_table = {}

  local file = io.open(path, "r")
  if file then
    content = file:read("*all")
    file:close()
    my_table = json.decode(content)
  end
  return my_table
end

Функция принимает имя файла, получает путь, открывает файл для чтения, считывает данные, декодирует JSON и возвращает таблицу. При отсутствии файла возвращается пустая таблица.

Применение параметров

В main.lua вызовите load_settings и примените загруженные данные:

local settings = load_settings("settings.json")

if settings then
  weight = settings.weight
  height = settings.height
  -- ... и так далее для остальных параметров
end

Проверьте существование файла перед использованием данных, чтобы предотвратить ошибки. Код устанавливает значения переменных weight, height и других, используя данные из settings.json.

Сохранение параметров

Функция save_settings сохраняет данные в settings.json:

function save_settings(data, file_name)
  local path = system.pathForFile(file_name, system.DocumentsDirectory)
  local content = ""

  local file = io.open(path, "w")
  if file then
      content = json.encode(data)
      file:write(content)
      file:close()
      return true
  else
      return false
  end
end

Функция принимает таблицу данных и имя файла, формирует JSON-строку, открывает файл для записи, записывает данные и закрывает файл. Возвращает true при успехе и false в противном случае.

Сохранение данных

Вызов save_settings осуществляется после получения данных от пользователя (например, после нажатия кнопки «Сохранить»):

local settings = {}
settings.weight = weight -- и так далее для других параметров

save_settings(settings, "settings.json")

Создается таблица settings с новыми данными, и вызывается save_settings для сохранения в settings.json. Путь к файлу — system.DocumentsDirectory.

Обработка ошибок

Возможны ошибки, связанные с путем к файлу или файловой системой. Тщательно проверяйте код и обрабатывайте ошибки. Замечание о баге эмулятора (закрытие окна при сохранении) относится к специфике эмулятора и не должно воспроизводиться на устройстве.

Реализация описанных шагов обеспечивает сохранение и загрузку параметров приложения, повышая удобство использования и сохраняя настройки между сессиями.

Что будем искать? Например,программа