Melih Aksoy
07/31/2019, 11:20 AMsourceSets {
commonMain {
dependencies {
implementation 'org.jetbrains.kotlin:kotlin-stdlib-common'
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-common:$coroutine_version"
implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:$serializer_version"
implementation "io.ktor:ktor-client-core:$ktor_version"
implementation "io.ktor:ktor-client-json:$ktor_version"
}
}
androidMain {
dependencies {
implementation 'org.jetbrains.kotlin:kotlin-stdlib'
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutine_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutine_version"
implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime:$serializer_version"
implementation "io.ktor:ktor-client-android:$ktor_version"
implementation "io.ktor:ktor-client-json-jvm:$ktor_version"
}
}
iosMain {
dependencies {
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-native:$coroutine_version"
implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime-native:$serializer_version"
implementation "io.ktor:ktor-client-ios:$ktor_version"
implementation "io.ktor:ktor-client-json-native:$ktor_version"
}
}
}
I’m having trouble with keeping client in common. If I use client in common module as just an HttpClient()
, without features, I’m getting class cast exception as in https://github.com/ktorio/ktor/issues/997.
Defining content type does not solve it, but I can add JsonFeature
to my client. This ends up crashing in Android tho:
Caused by: java.lang.IllegalStateException: Fail to find serializer. Consider to add one of the following dependencies:
- ktor-client-gson
- ktor-client-json // <- Oh well, it's actually there isn't it ?
- ktor-client-serialization
As seen above in dependencies, I’m including io.ktor:ktor-client-json
in common, but it does not contain any serializer that I can assign in
install(JsonFeature) {
serializer = ????
}
block. If I define serializer as expect
and try to implement actual
for Android, it’s fine, but again, I can’t find any for iOS implmentation ( io.ktor:ktor-client-json-native
).
What is the right way to do this by using kotlinx.serialization
for both platforms ?Dominaezzz
07/31/2019, 11:30 AMserializer = KotlinxSerializer()
Dominaezzz
07/31/2019, 11:31 AMimplementation("io.ktor:ktor-client-serialization:$ktorVersion")
Melih Aksoy
07/31/2019, 11:35 AMimplementation("io.ktor:ktor-client-serialization:$ktorVersion")
I’ll try with this one, but should it be a dependency for all three modules or just for common ? I found other examples using serializer = KotlinxSerializer()
, but I don’t have KotlinxSerializer
class in common.Dominaezzz
07/31/2019, 11:36 AMDominaezzz
07/31/2019, 11:36 AMimplementation("io.ktor:ktor-client-serialization-jvm:$ktorVersion")
, etc.Melih Aksoy
07/31/2019, 11:42 AMimplementation "io.ktor:ktor-client-serialization-native:$ktor_version"
for iOSMelih Aksoy
07/31/2019, 11:42 AMmbonnin
07/31/2019, 3:31 PMmbonnin
07/31/2019, 3:32 PMDominaezzz
07/31/2019, 3:33 PMmbonnin
07/31/2019, 3:34 PMDominaezzz
07/31/2019, 3:34 PMmbonnin
07/31/2019, 3:34 PM