====== Serialize ======
===== オブジェクトをシリアライズする =====
import java.io.Serializable
data class RowData(var id:Int
,var type:Int
,var score:Int):Serializable
===== 配列をシリアライズする =====
[[https://github.com/Kotlin/kotlinx.serialization|kotlinx.serialization]]を使用する必要がある。
buildscript {
ext.kotlin_version = '1.3.50'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version" // add
}
}
apply plugin: 'kotlinx-serialization' // add
...
dependencies {
...
implementation 'com.google.android.material:material:1.0.0-alpha1'
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.13.0" // add
...
シリアライズとは、簡単にいってしまえばオブジェクト(ポインタの集合)を文字列にして、データとして渡せる状態にすること。
import kotlinx.serialization.*
import kotlinx.serialization.json.*
// オブジェクトにアノテーションをつける
@Serializable
data class RowData(var id:Int
,var comp:Int
,var score:Int)
...
// オブジェクトのシリアライズ Json.stringify(型,実データ)
putExtra("rowdata", Json.stringify(RowData.serializer(),data))
// オブジェクト配列のシリアライズ Json.stringify(型,実データ)
val dataList = Json.stringify(RowData.serializer().list, datalist )
putExtra("rowdataList", dataList)
import kotlinx.serialization.*
import kotlinx.serialization.json.*
...
val intent = getIntent()
// 文字列として受け取り、目的の型にパースする
rowData = Json.parse( RowData.serializer(),intent.getSerializableExtra("rowdata") as String)
// リストの場合も文字列として受け取ってからパースする
val rowDataList = Json.parse( RowData.serializer().list , intent.getSerializableExtra("rowdataList") as String)