この文書の現在のバージョンと選択したバージョンの差分を表示します。
| 次のリビジョン | 前のリビジョン | ||
|
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> | ||