この文書の現在のバージョンと選択したバージョンの差分を表示します。
次のリビジョン | 前のリビジョン | ||
kotlin:serialize [2019/11/19 21:32] ips 作成 |
kotlin:serialize [2019/11/19 22:33] (現在) ips [配列をシリアライズする] |
||
---|---|---|---|
ライン 14: | ライン 14: | ||
===== 配列をシリアライズする ===== | ===== 配列をシリアライズする ===== | ||
+ | [[https://github.com/Kotlin/kotlinx.serialization|kotlinx.serialization]]を使用する必要がある。 | ||
+ | |||
+ | <code kotlin build.gradle(project)> | ||
+ | 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 | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </code> | ||
+ | |||
+ | <code kotlin build.gradle(app)> | ||
+ | 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 | ||
+ | ... | ||
+ | </code> | ||
+ | |||
+ | シリアライズとは、簡単にいってしまえばオブジェクト(ポインタの集合)を文字列にして、データとして渡せる状態にすること。 | ||
+ | |||
+ | <code kotlin 渡す側のアクティビティ> | ||
+ | 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) | ||
+ | |||
+ | </code> | ||
+ | |||
+ | <code kotlin 受ける側のアクティビティ> | ||
+ | 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) | ||
+ | </code> | ||