31.01.2026 06:35:53 am
Тема об ошибках, которые мне встретились при написании Android приложении (Kotlin) и возможные решения.
Ошибки (Навигация по теме):
Ошибки (Навигация по теме):
- Жалоба
31.01.2026 01:22:50 pm
Type 'MutableState<String>' has no method 'setValue(Nothing?, KMutableProperty0<*>, String)', so it cannot serve as a delegate for var (read-write property)
Эта ошибка возникает, когда вы пытаетесь использовать
mutableStateOf() для делегирования свойства через by, но не подключили нужный импорт.Причина
Для работы синтаксиса
by mutableStateOf() требуется импорт:ВыделитьKotlin
import androidx.compose.runtime.getValue
import androidx.compose.runtime.setValueБез этих импортов компилятор не видит методы
getValue/setValue, необходимые для делегирования.
01.02.2026 06:13:07 am
Unresolved reference 'Done'
Ошибка Unresolved reference 'Done' возникает, потому что компилятор не находит константу
ImeAction.Done. Это значит — не подключены нужные импорты.Как исправить
Добавьте в начало файла следующие импорты:
ВыделитьKotlin
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.text.input.KeyboardOptions
import androidx.compose.ui.text.input.KeyboardActions
07.02.2026 05:19:02 pm
Package name 'xxx.xxx.xxx.XXxx' part should not start with an uppercase letter
Это предупреждение Lint (анализатора кода Android) о нарушении стандартов именования пакетов в Java/Kotlin.
Согласно официальным соглашениям (Java/Kotlin):
- Имена пакетов должны состоять только из строчных букв и цифр.
- Использование заглавных букв (особенно в начале частей имени) не рекомендуется.
Если вы видите у себя это предупреждение, значит название вашего пакета содержит заглавные буквы (Одну или несколько). Изменив заглавные буквы на "маленькие", ошибка исчезнет.
11 часов назад
Несоответствие типов Long и null
В коде ниже: Навигация открывающая экран чата с двумя параметрами. Параметр
userId или chatId может быть null, но так как оба эти параметра имеют тип Long, то null они быть не должны, в любом случае.ВыделитьKotlin
composable( // Private and Public Chat
route = "chat/{userId}/{chatId}",
arguments = listOf(
navArgument("userId") {
type = NavType.LongType
nullable = true
},
navArgument("chatId") {
type = NavType.LongType
nullable = true
}
)
) { entry ->
val userId: Long? = entry.arguments?.getLong("userId")
val chatId: Long? = entry.arguments?.getLong("chatId")
Chat(navController, chatId, userId)
} // End: Private and Public ChatЯ решил проблему (Возможно костыль): Преобразовать параметр в
String, затем в Long, если не null, и в null, если не Long:ВыделитьKotlin
composable( // Private and Public Chat
route = "chat/{userId}/{chatId}",
arguments = listOf(
navArgument("userId") {
type = NavType.StringType
nullable = true
},
navArgument("chatId") {
type = NavType.StringType
nullable = true
}
)
) { entry ->
// userId | chatId
// Type conversion: from Long to String, then back to Long or null
val userId: Long? = entry.arguments?.getString("userId")?.toLongOrNull()
val chatId: Long? = entry.arguments?.getString("chatId")?.toLongOrNull()
Chat(navController, chatId, userId)
} // End: Private and Public Chat