Android、Kotlin:getSerializable系のDeprecated対応

投稿者: | 2023年8月4日

Android SDKが33以降ではgetSerializableExtra等が非推奨になった件への対応

Android TVのサンプルプログラム(Android Studioが勝手に作ってくれるもの)の中に

val (_, title, description, _, _, videoUrl) =
    activity?.intent?.getSerializableExtra(DetailsActivity.MOVIE) as Movie

という一文がある。このgetSerializableExtraに限らず、Serialize系がAndroid SDKが33以降で非推奨になった。

対応は簡単だがBuild.VERSION_CODES.TIRAMISUの条件が付く。それで条件分岐を作る

val movie: Movie? = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
    activity?.intent?.getSerializableExtra(DetailsActivity.MOVIE, Movie::class.java)
    } else {
        activity?.intent?.extras?.getSerializable(DetailsActivity.MOVIE)
        } as Movie?
    val (_, title, description, _, _, videoUrl) = movie ?: "Default Title" as Movie

こんな感じだ。

as Movieで入れているものに対してMovie::class.javaを引数とした新しいタイプのType-Safeバージョンを使う。もちろんMovieの部分は適宜対応するものに変える必要がある。

また元はNullableでなかったものをNullableにしたので、エルビス演算子+”Default Title”を追加した。

とりあえずSerialize系はこれで頑張ってみる。

コメントを残す