
Setelah bekerja di perpustakaan multi-platform yang mengumpulkan artefak .framework dan .ar, saya sampai pada kesimpulan bahwa sudah banyak hal berguna di Kotlin, tetapi banyak dari kita tidak pernah tahu tentang mereka.
Salah satu hal yang harus Anda urus ketika membuat proyek multi-platform adalah perpustakaan yang Anda gunakan saat mengembangkan. Yang terbaik adalah tetap pada solusi yang disediakan oleh Kotlin di luar kotak.
Jadi, ketika saya berada dalam situasi ketika ada kebutuhan untuk membuat serial dokumen JSON yang perlu digunakan pada dua platform (iOS dan Android), ada masalah dalam menyusun proyek untuk iOS. Setelah sedikit mencari, saya menemukan
perpustakaan Kotlinx Serializtion .
Sejujurnya, saya tidak pernah tahu tentang perpustakaan ini, jadi publikasi ini lebih untuk orang-orang yang, sama seperti saya, tidak tahu tentang alat ini.
Proses pengaturan proyek untuk menggunakan plugin dijelaskan dengan cukup baik dalam
repositori Github . Tapi saya akan mengkonfigurasi proyek untuk penggunaan Android dan multi-platform.
Satu-satunya hal yang perlu Anda lakukan dengan kompilasi multi-platform adalah menambahkan dependensi ke akhir dependensi dalam file grandle asli Anda.
implementation org.jetbrains.kotlinx:kotlinx-serialization-runtime-native:0.9.1
Contoh Grundle untuk penggunaan multi-platform
plugins { id 'kotlin-multiplatform' version '1.3.11' id 'kotlinx-serialization' version '1.3.10' } repositories { google() jcenter() mavenCentral() maven { url "https://kotlin.bintray.com/kotlinx" } } apply plugin: 'com.android.library' apply plugin: 'kotlin-android-extensions' android { compileSdkVersion 28 defaultConfig { minSdkVersion 15 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support.constraint:constraint-layout:1.1.3' androidTestImplementation 'com.android.support.test:runner:1.0.2' } kotlin { targets { fromPreset(presets.android, 'android')
Untuk Android
apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlinx-serialization' android { compileSdkVersion 28 defaultConfig { applicationId "com.example.smile.kotlinxretrosample" minSdkVersion 16 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.9.1" implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support.constraint:constraint-layout:1.1.3' implementation 'com.android.support:design:28.0.0' implementation 'com.squareup.retrofit2:retrofit:2.5.0' implementation 'com.squareup.okhttp3:okhttp:3.12.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' }
Serialisasi
Untuk membuat serial suatu kelas, cukup tambahkan penjelasan
@Serializable
di depannya
import kotlinx.serialization.Serializable @Serializable class Field { var length: Int = 0 var hint: String = "" var required: Boolean = false }
Serialisasi juga bekerja dengan kelas data.Sekarang, mari kita coba menulis contoh kecil untuk mengonversi JSON ke objek dan sebaliknya.
fun toObject(stringValue: String): Field { return JSON.parse(Field.serializer(), stringValue) } fun toJson(field: Field): String {
@Transient
dan @Optional
Dua anotasi lain yang layak disebutkan adalah:
@Transient
- @Transient
Serializer bahwa bidang tersebut harus diabaikan.@Optional
- Serializer tidak akan berhenti dan tidak akan melempar kesalahan jika bidang tidak ada, tetapi pada saat yang sama, nilai default tetap harus ditetapkan.
@Optional var isOptional: Boolean = false @Transient var isTransient: Boolean = false
Contoh Android menggunakan Retrofit
Bagi mereka yang ingin menggunakan plugin ini dalam pengembangan untuk Android, Retrofit 2 memiliki adaptor.
Tautan ke adaptor .
Sedikit kode:
un createRetrofit(): Retrofit { val contentType = MediaType.get("application/json") return Retrofit.Builder() .addConverterFactory(serializationConverterFactory(contentType, JSON)) .baseUrl(BASE_URL) .client(provideOkhttpClient()) .build() }
Jika kelas Anda sudah memiliki anotasi, maka setelah mengirim permintaan, kelas Anda akan berubah menjadi objek JSON.
Secara umum, serialisasi di Kotlin adalah tambahan yang bagus untuk proyek apa pun dan membuat proses menyimpan data dalam string atau objek JSON jauh lebih sederhana, kurang padat karya.
Daftar repositori
- KotlinxRetrofit adalah contoh kerja kecil menggunakan serialisasi di Android
- kotlinx.serialization - Repositori perpustakaan utama
JakeWharton / retrofit2-kotlinx-serialization-converter - adaptor untuk Retrofit