Skip to content

Commit 3ff9ca6

Browse files
author
Nino Handler
committed
Implement api connection
1 parent 74daef2 commit 3ff9ca6

File tree

4 files changed

+89
-8
lines changed

4 files changed

+89
-8
lines changed

SharedCode/build.gradle.kts

Lines changed: 43 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
22

33
plugins {
44
kotlin("multiplatform")
5+
id("kotlinx-serialization")
56
}
67

78
kotlin {
@@ -23,18 +24,54 @@ kotlin {
2324
jvm("android")
2425

2526
sourceSets["commonMain"].dependencies {
27+
// Kotlin
2628
implementation("org.jetbrains.kotlin:kotlin-stdlib-common")
29+
30+
// Coroutines
31+
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-common:1.3.3")
32+
33+
// Ktor
2734
implementation("io.ktor:ktor-client-core:1.3.0-rc2")
35+
implementation("io.ktor:ktor-client-json:1.3.0-rc2")
36+
implementation("io.ktor:ktor-client-logging:1.3.0-rc2")
37+
implementation("io.ktor:ktor-client-serialization:1.3.0-rc2")
38+
39+
// Serialization
2840
implementation("org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:0.14.0")
2941
}
3042

3143
sourceSets["androidMain"].dependencies {
44+
// Kotlin
3245
implementation("org.jetbrains.kotlin:kotlin-stdlib")
46+
47+
// Coroutines
48+
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.3")
49+
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.3")
50+
51+
// Serialization
3352
implementation("org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.14.0")
53+
54+
// Ktor
55+
implementation ("io.ktor:ktor-client-android:1.3.0-rc2")
56+
implementation ("io.ktor:ktor-client-core-jvm:1.3.0-rc2")
57+
implementation ("io.ktor:ktor-client-json-jvm:1.3.0-rc2")
58+
implementation ("io.ktor:ktor-client-logging-jvm:1.3.0-rc2")
59+
implementation ("io.ktor:ktor-client-serialization-jvm:1.3.0-rc2")
3460
}
3561

3662
sourceSets["iosMain"].dependencies {
63+
// Coroutines
64+
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-native:1.3.3")
65+
66+
// Serialization
3767
implementation("org.jetbrains.kotlinx:kotlinx-serialization-runtime-native:0.14")
68+
69+
// Ktor
70+
implementation ("io.ktor:ktor-client-ios:1.3.0-rc2")
71+
implementation ("io.ktor:ktor-client-core-native:1.3.0-rc2")
72+
implementation ("io.ktor:ktor-client-json-native:1.3.0-rc2")
73+
implementation ("io.ktor:ktor-client-logging-native:1.3.0-rc2")
74+
implementation ("io.ktor:ktor-client-serialization-native:1.3.0-rc2")
3875
}
3976
}
4077

@@ -58,10 +95,12 @@ val packForXcode by tasks.creating(Sync::class) {
5895
/// generate a helpful ./gradlew wrapper with embedded Java path
5996
doLast {
6097
val gradlew = File(targetDir, "gradlew")
61-
gradlew.writeText("#!/bin/bash\n"
62-
+ "export 'JAVA_HOME=${System.getProperty("java.home")}'\n"
63-
+ "cd '${rootProject.rootDir}'\n"
64-
+ "./gradlew \$@\n")
98+
gradlew.writeText(
99+
"#!/bin/bash\n"
100+
+ "export 'JAVA_HOME=${System.getProperty("java.home")}'\n"
101+
+ "cd '${rootProject.rootDir}'\n"
102+
+ "./gradlew \$@\n"
103+
)
65104
gradlew.setExecutable(true)
66105
}
67106
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package de.handler.mpp.mobile
2+
3+
import kotlinx.serialization.UnstableDefault
4+
5+
@UnstableDefault
6+
object Repository {
7+
private val service = Service()
8+
private val astronauts = mutableListOf<Astronaut>()
9+
10+
suspend fun fetchPeople(forceNetwork: Boolean = false): List<Astronaut> {
11+
if (astronauts.isEmpty() || forceNetwork) {
12+
astronauts.clear()
13+
astronauts.addAll(service.fetchPeople().people)
14+
}
15+
return astronauts
16+
}
17+
}
Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,33 @@
11
package de.handler.mpp.mobile
22

3-
import io.ktor.client.engine.HttpClientEngine
3+
import io.ktor.client.HttpClient
4+
import io.ktor.client.features.json.JsonFeature
5+
import io.ktor.client.features.json.serializer.KotlinxSerializer
6+
import io.ktor.client.request.get
7+
import kotlinx.serialization.Serializable
8+
import kotlinx.serialization.UnstableDefault
9+
import kotlinx.serialization.json.Json
10+
import kotlinx.serialization.json.JsonConfiguration
411

5-
class TodoApiClient(httpClientEngine: HttpClientEngine? = null) {
12+
@Serializable
13+
data class AstronautWrapper(val number: Int, val people: List<Astronaut>)
614

15+
@Serializable
16+
data class Astronaut(val craft: String, val name: String)
17+
18+
@UnstableDefault
19+
class Service {
20+
private val baseUrl = "http://api.open-notify.org/astros.json"
21+
22+
private val client by lazy {
23+
HttpClient {
24+
install(JsonFeature) {
25+
serializer = KotlinxSerializer(Json(JsonConfiguration(strictMode = false)))
26+
}
27+
}
28+
}
29+
30+
suspend fun fetchPeople(): AstronautWrapper {
31+
return client.get(baseUrl)
32+
}
733
}

build.gradle

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,4 @@ allprojects {
2222

2323
task clean(type: Delete) {
2424
delete rootProject.buildDir
25-
}
26-
apply plugin: 'kotlinx-serialization'
25+
}

0 commit comments

Comments
 (0)