2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Kotlin Json文字列のserialization 正しい対処できなかったので逃げ対応で対処しました

Last updated at Posted at 2021-01-29

 金田著「はじめてのandroidプログラミング 第5版」を使って、勉強しています。

 「第10章アニメーションする ツーリスト情報アプリを作ろう」の第一段階p393まで、写経が進みました。コンパイルしたところ、次のようなエラーが発生しましたので報告します。

 また、より正しそうな変更方法が、@Teramonte4 さんのご教示により分かりましたので、本レポートの続編「Kotlin Json文字列のserializationのParseが使えなくなったので、使えるように修正しました。」も参照してください。(2021/02/02追記)

 以下、本書を持っている前提で説明します。本書を使って勉強中の方、一緒に勉強しましょう。

##1.エラーの発生状況

e: E:\Engineering\AndroidStudioProjects\hajimeteno5\TouristSights\app\src\main\java\com\example\touristsights\Sight.kt: (12, 1): 
Your current kotlinx.serialization core version is too low, 
while current Kotlin compiler plugin 1.4.21 requires at least 1.0-M1-SNAPSHOT. 
Please update your kotlinx.serialization runtime dependency.
(現在のkotlinx.serializationコアのバージョンが低すぎます。
現在のKotlinコンパイラプラグイン1.4.21では1.0-M1-SNAPSHOT以上が必要です。
kotlinx.serialization のランタイム依存関係を更新してください。)

 これは、次のコードで発生していました。

Sight.kt
package com.example.touristsights

import kotlinx.serialization.Serializable
// 省略
@Serializable    // ここで発生
class Sight ( )

##2.調査
 付属のソースコードと比較してみると、build.gradle(Project)ファイルの次の部分で差異がありました。(コメントアウト削除の方が、エラーが発生した時。)

build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
//    ext.kotlin_version = "1.4.21"     // 削除
    ext.kotlin_version = "1.3.72"       // 修正
    repositories {
        google()
        jcenter()
    }

##3.一時対策
 修正の通り、変更しSyncNowを実行し、再コンパイルしたところ、成功しました。(とりあえず、現状、写経を目的としているため、とりあえずこれで良しとします。)

##4.原因として考えられること
AndroidStudioのバージョンの違い、或いはKotlinのバージョンの違い
私   :ver.4.1.2
本の推奨:ver4.1

##5.本当の対策方法
 ググったところ、「【2020年秋版】kotlinx.serializationで配列のJson文字列をパース」という資料を見つけた。試してみようと思いましたが、

plugins {
    id 'org.jetbrains.kotlin.jvm' version "$kotlin_version"
    id "org.jetbrains.kotlin.plugin.serialization" version "$kotlin_version"
}

を入れる部分が分からなかったので、今日は諦めました。今後、写経が終わったら、gradleを勉強しつつ、またkotlinx.serialization 1.0 releasedといった資料を物色して、再挑戦したいと思います。
 どなたか、対策を見つけられたら教えてください。

##6.その他追記:表示の回転について
 本アプリは、表示を回転させ、横画面でも表示できるように作られているが、エミュレータの端末(Nexus5x API30)で回転すると、なぜか縦表示のままです。本書指定のpixel2 api30や実機huawei nova lite(CAZ-TL10)、そしてhuaweiP10lite(was-lx2j)では正常動作を確認しました。

2
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?