Декодирование (десериализация) данных JSON в Jetpack Compose кажется довольно простым, однако я столкнулся с проблемой, которую не могу решить. Я использую последнюю версию Android Studio и не уверен, работает ли функция .decodeFromString()
в AS или мне следует использовать для этого IntelliJ IDEA? Вот мой код:
dependencies {
implementation(libs.kotlinx.serialization.json)
}
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.Serializable
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.json.Json
@ExperimentalSerializationApi
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
JSONsibleTheme {
DecodedText()
}
}
}
}
@Serializable
data class User(val id: Int, val name: String)
@ExperimentalSerializationApi
@Composable
fun DecodedText() {
val jsonString = """
{
"id": 722549,
"name": "John Smith"
}
"""
val deserialized = Json.decodeFromString<User>(string = jsonString)
Text(
text = "${deserialized.name}, ${deserialized.id}"
)
}
Я не могу запустить этот код ни на симуляторе, ни на реальном устройстве, потому что аннотация @Serializable
неприменима (она подчеркнута желтым цветом). В Предупреждении говорится:
// kotlinx.serialization compiler plugin is not
// applied to the module, so this annotation would
// not be processed. Make sure that you've setup
// your buildscript correctly and re-import project.
Вам также необходимо применить плагин к вашему root
build.gradle.kts
файлу.
plugins {
id("org.jetbrains.kotlin.plugin.serialization") version "$kotlinVersion" apply false
}
и ваш app
build.gradle.kts
файл:
plugins {
id("kotlinx-serialization")
}
Также убедитесь, что версия плагина соответствует вашей версии Kotlin.
Пожалуйста, проверьте логарифм, что не так. Вероятно, это ошибка времени выполнения, а не ошибка компиляции.
В вашей строке json это должно быть «id», а не «user_id». Ключи должны соответствовать классу данных.
Конечно. Удачи!
Я хотел бы дополнить ответ @AtickFaisal (в любом случае спасибо, Атик, за указание правильного направления), потому что со всеми указанными настройками (включая плагин компилятора Compose) мое приложение Jetpack Compose работает без ошибок и успешно декодирует данные JSON.
Проект build.gradle.kts
plugins {
alias(libs.plugins.android.application) apply false
alias(libs.plugins.jetbrains.kotlin.android) apply false
alias(libs.plugins.compose.compiler) apply false
id("org.jetbrains.kotlin.plugin.serialization") version "2.0.20" apply false
}
buildscript {
dependencies {
classpath(libs.kotlin.serialization)
}
}
Модуль build.gradle.kts
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.jetbrains.kotlin.android)
alias(libs.plugins.compose.compiler)
id("kotlinx-serialization")
}
dependencies {
implementation(libs.kotlinx.serialization.json)
// other implementations
}
libs.versions.toml
[versions]
agp = "8.5.2"
kotlin = "2.0.20"
[libraries]
kotlin-serialization = { module = "org.jetbrains.kotlin:kotlin-serialization", version.ref = "kotlinSerialization" }
kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinxSerializationJson" }
[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }
jetbrains-kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
Вы тоже добавили в блок плагинов уровня проекта? Пожалуйста, проверьте обновленный ответ.