# Функции (колбеки) жизненного цикла * `onResume()` - вызывается при каждом возврате на рабочий стол; * `onAlarm()` - вызывается при возврате на рабочий стол при условии, что с прошлого вызова прошло больше 30 минут; * `onTick()` - вызывается каждую секунду пока лаунчер находится на экране. Для большинства сетевых скриптов (загрузка и показ значений) следует использовать `onAlarm`. Использование других функций может привести к блокировке вашего IP. # Сетевые функции * `net:getText(url)` - функция для получения текстовых данных по сети (JSON, XML, plain text). Функция не возвращает никакого значения, а вместо этого вызывает колбек `onNetworkResult(string)`. В нем следует обрабатывать результат. # Функции показа данных * `ui:showText(string)` - выводит в виджет обычный текст; повторный вызов стирает предыдущий текст; * `ui:showLines(table)` - выводит список строк, в качестве аргумента принимает таблицу строк; * `ui:showLinesWithAuthors(table, table)` - выводит список строк с отправителем (на манер почтового виджета); первая таблица - сами строки, вторая - соответствующие им отправители; таблицы должны быть одинакового размера; * `ui:showButtons(table)` - выводит список кнопок; аргумент - таблица строк; * `ui:showProgressBar(text, currentValue, maxValue)` - показывает прогресс бар; * `ui:showToast(string)` - показывает информационное сообщение в стиле Android; При нажатии любого элемента интерфейса будет выполнен колбек `onClick(number)`, где number - это порядковый номер элемента. Например, если вы используете `ui:showButtons` для показа трех кнопок, то при нажатии первой кнопки будет вызван `onClick` с аргументом 1, второй - с аргументов 2 и так далее. Если элемент на экране всего один - аргумент всегда будет равен единицы и его можно будет опустить. # Системные функции * `system:openApp(string)` - открывает приложение, имя пакета которого указано в аргументе; * `system:openBrowser(string)` - открывает указанный URL в браузере или в приложении, умеющем обрабатывать данный тип URL; * `system:getLocation()` - возвращает сохраненнное местоположение в таблице с двумя значениями (запрос местоположения НЕ выполняется, используется значение, сохраненное системой ранее). # Функции обработки данных * `json:getValue(string, string)` - получает указанное значение из JSON-строки; первый аргумент - JSON-строка, второй - инструкция для получения значения. В отличие классических парзеров JSON, эта функция предназначена не для парзинга, а именно для извлечения одиночных значений. Например, есть следующий JSON: ``` { "type": "success", "value": { "id": 344, "joke": "Aliens DO indeed exist. They just know better than to visit a planet that Chuck Norris is on.", "categories": [] } } ``` Необходимо извлечь из него строку "joke". По тексту JSON видно, что эта строка содержится внутри объекта "value", а сам этот объект находится внутри основного объекта JSON. Другими словами чтобы извлечь нужную строку необходимо "открыть" основной объект JSON, затем "открыть" объект "value" и извлечь из него строку "joke". В коде это будет выглядеть так: ``` local joke = json:getValue(result, "object object:value string:joke") ``` При этом полный текст скрипта выглядит так: ``` function onAlarm() net:getText("http://api.icndb.com/jokes/random") end function onNetworkResult(result) local joke = json:getValue(result, "object object:value string:joke") aio:showText(joke) end ``` Обратите внимание, что последним элементом строки всегда должна идти инструкция для извлечения примитивных типов данных: * `string:имя` * `int:имя` * `double:имя` Также вместо `object` можно использовать `array` если в JSON находится массив.