我第一次接触 Kotlin Multiplatform,并按照此处的指南进行操作
https://kotlinlang.org/docs/multiplatform-mobile-upgrade-app.html
我有课了
@Serializable
data class RocketLaunch (
@SerialName("flight_number")
val flightNumber: Int,
@SerialName("name")
val missionName: String,
@SerialName("date_utc")
val launchDateUTC: String,
@SerialName("success")
val launchSuccess: Boolean?,
)
我实例化了一个 HTTPClient 并调用 SpaceX URL,如指南中所述
private val httpClient = HttpClient {
install(ContentNegotiation) {
json(Json {
prettyPrint = true
isLenient = true
ignoreUnknownKeys = true
})
}
}
@Throws(Exception::class)
suspend fun greet(): String {
val rockets: List<RocketLaunch> = httpClient.get("https://api.spacexdata.com/v4/launches").body()
val lastSuccessLaunch = rockets.first() //{ it.launchSuccess == true }
return "Guess what it is! > ${platform.name.reversed()}!"
"\nThe last successful launch was ${lastSuccessLaunch.title} 🚀"
}
当我运行它并捕获异常时,我得到了
kotlinx.serialization.json.internal.JsonDecodingException:预期 类 kotlinx.serialization.json.JsonObject (Kotlin 反射不是 可用)作为序列化主体 kotlinx.serialization.Polymorphic,但有类 kotlinx.serialization.json.JsonArray(Kotlin 反射不是 可用)
我已经仔细检查过,并且正确遵循了指南,并且 Feed 有效
插件
kotlin("plugin.serialization") 版本“1.8.10”
依赖关系
实现(“org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4”)
实现(“io.ktor:ktor-client-core:$ktorVersion”)
实现(“io.ktor:ktor-client-content-negotiation:$ktorVersion”)
实现(“io.ktor:ktor-serialization-kotlinx-json:$ktorVersion”)
修复方法是添加
id(“kotlinx-序列化”) 例如
plugins {
kotlin("multiplatform")
id("com.android.library")
id("kotlinx-serialization")
}
到共享的 build.gradle.kts 文件。我觉得这很奇怪,因为它被添加到项目一级,如下所示。
kotlin(“plugin.serialization”)版本“1.8.10”
在共享 build.gradle.kts 中使用
id("org.jetbrains.kotlin.plugin.serialization") version "1.8.10"
而不是 kotlin("plugin.serialization") version "1.8.21"
。例如
plugins {
kotlin("multiplatform")
id("com.android.library")
id("org.jetbrains.kotlin.plugin.serialization") version "1.8.21"
}