====== 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)