
بعد العمل في مكتبة متعددة المنصات التي جمعت .framework والتحف .aar ، توصلت إلى استنتاج مفاده أن هناك الكثير من الأشياء المفيدة بالفعل في Kotlin ، لكن الكثير منا لم يعرف عنها أبدًا.
تعتبر المكتبات التي تستخدمها عند التطوير أحد الأشياء التي يجب الاهتمام بها عند إنشاء مشروع متعدد المنصات. من الأفضل التمسك بالحلول التي توفرها Kotlin.
لذلك ، عندما حصلت على موقف عندما كانت هناك حاجة إلى إجراء تسلسل لمستند JSON يلزم استخدامه على نظامين أساسيين (iOS و Android) ، كانت هناك مشاكل في تجميع المشروع لنظام iOS. بعد قليل من البحث ، وجدت
مكتبة Kotlinx Serializtion .
لكي أكون أمينًا ، لم أكن أعرف مطلقًا عن هذه المكتبة ، لذا فإن هذا المنشور هو أكثر للأشخاص الذين لم يعرفوا بهذه الأداة ، مثلي تمامًا.
تم وصف عملية إعداد مشروع لاستخدام البرنامج المساعد جيدًا في
مستودع جيثب . لكنني سوف أقوم بتكوين المشروع لكل من Android والاستخدام متعدد المنصات.
الشيء الوحيد الذي تحتاج إلى القيام به مع التحويل البرمجي متعدد الأنظمة هو إضافة تبعيات إلى نهاية التبعيات في ملف grandle الأصلي.
implementation org.jetbrains.kotlinx:kotlinx-serialization-runtime-native:0.9.1
مثال Grundle للاستخدام متعدد الأنظمة
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')
للأندرويد
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' }
التسلسل
لتسلسل فصل
@Serializable
، قم ببساطة بإضافة التعليق التوضيحي
@Serializable
أمامه
import kotlinx.serialization.Serializable @Serializable class Field { var length: Int = 0 var hint: String = "" var required: Boolean = false }
يعمل التسلسل أيضًا مع فئات البيانات.الآن ، دعونا نحاول كتابة مثال صغير لتحويل JSON إلى كائن والعكس بالعكس.
fun toObject(stringValue: String): Field { return JSON.parse(Field.serializer(), stringValue) } fun toJson(field: Field): String {
@Transient
و @Optional
هناك شروحان آخران تجدر الإشارة إليهما:
@Transient
- @Transient
Serializer أنه يجب تجاهل الحقل.@Optional
- Serializer لن تتوقف ولن @Optional
حدوث خطأ إذا كان الحقل غائبًا ، ولكن في الوقت نفسه ، لا يزال يجب تعيين القيمة الافتراضية.
@Optional var isOptional: Boolean = false @Transient var isTransient: Boolean = false
مثال أندرويد باستخدام التحديثية
بالنسبة لأولئك الذين يرغبون في استخدام هذا المكون الإضافي في التطوير لنظام Android ، يحتوي Retrofit 2 على محول.
رابط للمحول .
القليل من الكود:
un createRetrofit(): Retrofit { val contentType = MediaType.get("application/json") return Retrofit.Builder() .addConverterFactory(serializationConverterFactory(contentType, JSON)) .baseUrl(BASE_URL) .client(provideOkhttpClient()) .build() }
إذا كان لصفك بالفعل تعليقات توضيحية ، فعند إرسال الطلب ، يجب أن يتحول صفيك إلى كائن JSON.
بشكل عام ، يمثل التسلسل في Kotlin إضافة رائعة لأي مشروع ويجعل عملية حفظ البيانات في سلسلة أو كائن JSON أبسط وأقل كثافة في العمل.
قائمة مستودع
- KotlinxRetrofit هو مثال صغير يعمل على استخدام التسلسل على Android
- kotlinx.serialization - مستودع المكتبة الرئيسي
JakeWharton / retrofit2-kotlinx-serialization-converter - adapter for Retrofit