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