LibCode»Блог

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

SQL | PHP | Kotlin | Python | C++ | JavaScript

Kotlin: Хранилище конфигурационных переменных

В Kotlin/Android есть несколько способов организовать централизованное хранение конфигурационных переменных.

Ресурсные файлы (values)


Создайте файл в "res/values/strings.xml":
<resources>
    <string name="api_url">https://api.example.com</string>
    <integer name="timeout">30000</integer>
    <bool name="debug_mode">true</bool>
</resources>

Доступ через: R.string.api_url.

Константы в отдельном файле


Создайте файл "Config.kt":
object Config {
    const val API_URL = "https://api.example.com"
    const val TIMEOUT = 30000
    const val DEBUG_MODE = true
}

Доступ: Config.API_URL.

BuildConfig


Настройте в "build.Gradle":
buildTypes {
    debug {
        buildConfigField "String", "API_URL", "\"https://api.example.com\""
    }
    release {
        buildConfigField "String", "API_URL", "\"https://api.prod.com\""
    }
}

Доступ: BuildConfig.API_URL.

Application-класс


Создайте в "Application":
class MyApp: Application() {
 
...

Kotlin: Функции, лямбды и обработка нажатий

Функции: Основы


Функция — это блок кода, который выполняет определённое действие и может быть вызван многократно.

Синтаксис:
fun имяФункции(параметры): ТипВозврата {
    // тело функции
    return результат
}

Пример простой функции:
fun addNumbers(a: Int, b: Int): Int {
    return a + b
}

// Вызов
val sum = addNumbers(5, 3)  // sum = 8

Важные моменты:
  • fun — ключевое слово для объявления функции.
  • Типы параметров и возвращаемого значения указываются явно.
  • Если функция не возвращает значение, тип возврата — Unit (можно не указывать).

Функции без возвращаемого значения


Когда функция выполняет действие, но не возвращает результат:
fun showMessage(message: String) {
    println(message)
}

// Вызов
showMessage("Привет из функции!")

Значения параметров по умолчанию


Можно задать значения по умолчанию, чтобы не указывать их при вызове:
fun greet(name: String = "Гость") {
    println("Привет, $name!")
}

// Варианты
...

Kotlin: Как получать данные с JSON

Давайте разберем, как получить конкретное значение из JSON файла, хранящегося в "assets".

Пример структуры JSON (user.json)
[
    {
        "id": 1,
        "name": "Иван",
        "email": "iv@mail.com",
        "age": 25
    },
    {
        "id": 2,
        "name": "Анна",
        "email": "an@mail.com",
        "age": 30
    }
]

Шаги для получения данных



Чтение файла из assets
val jsonString = context.assets.open("user.json").bufferedReader().use { it.readText() }

Создание модели данных
data class User(
    val id: Int,
    val name: String,
    val email: String,
    val age: Int
)

Парсинг JSON и поиск по ID
// Парсим весь JSON в список
val gson = Gson()
val users = gson.fromJson(jsonString, Array<User>::class.java).toList()

// Ищем пользователя по ID
fun getUserById(id: Int): User? {
    return users.find { it.id == id }
}

// Пример использования
val user = getUserById(1)
user?.let {
    println("Имя:
...

Kotlin: Формы ввода текста

Для создания формы ввода текста в Jetpack Compose можно использовать TextField. Вот пример реализации:
@Composable
fun TextInputForm() {
    Column(
        modifier = Modifier
            .fillMaxSize()
            .padding(16.dp),
        verticalArrangement = Arrangement.Center,
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        // Поле для ввода текста
        var text by remember { mutableStateOf("") }
        
        TextField(
            value = text,
            onValueChange = { newText ->
                text = newText
            },
            label = { Text("Введите текст") },
            modifier = Modifier
                .fillMaxWidth()
                .padding(bottom = 16.dp)
        )
        
        // Кнопка отправки
        Button(
            onClick = { 
                // Здесь обработка введенного текста
                println("Введенный текст: $text")
            },
           
...

Как обновляется приложение установленное на Android устройство

При установке обновленной версии приложения на смартфон удалять предыдущую версию вручную не нужно. Система Android автоматически обработает обновление следующим образом.

Как работает обновление



Проверка подписи:
  • Новая версия приложения должна быть подписана тем же ключом, что и предыдущая.
  • Если подпись не совпадает, установка завершится ошибкой.

Процесс обновления:
  • Старые файлы приложения заменяются новыми.
  • Данные приложения (если они не удалены в новой версии) сохраняются.
  • Настройки и пользовательские данные остаются нетронутыми.

Важные моменты


  • База данных: Если вы используете Room или другую БД, нужно правильно обработать миграцию данных.
  • Пользовательские файлы: Файлы в директории приложения сохраняются.
  • SharedPreferences: Настройки приложения остаются.

Что нужно учесть при разработке



Версия приложения в "build.gradle":
  • Увеличить versionCode.
  • Обновить versionName.

ВыделитьФайл: build.gradle.kts
android {
    defaultConfig {
        applicationId "com.example.app"
        minSdkVersion
...