【Android】KotlinでGSONを使って内部ストレージに書き出す方法

注意

本記事中のKotlinのコードはKotlin Android Extensionsを利用した記述のため素のKotlinとは書き方が異なる可能性があります。 ご注意ください。


GSONを利用可能にする

GSONのプロジェクトページを参考に最新のGSONを確認してアプリレベルのbuild.gradleに追加する。

dependencies {
    implementation 'com.google.code.gson:gson:2.8.5'
}

2018/06/12時点では2.8.5が最新なので上のように追加する。

内部ストレージディレクトリの取得

アクティビティであれば

val dirPath = fileDir

で取得可能。

今回僕は自作クラス内で書き込みが必要だったのでcontextを受け取り

val dirPath = context.fileDir

で取得した。

GSONでオブジェクトをJSONに変換する

val jsonStr : String! = Gson().toJson(hogeObject)

ワンライナーで書かなければいけない訳ではなく、

val gson = Gson()
val jsonStr = gson.toJson(hogeObject)

でも問題ない。

ファイルに書き込む

File($PATH$).writeText(jsonStr)

$PATH$StringもしくはUrlを入力する必要がある。 今回はそれぞれをStringにして"$dirPath/$fleName"のようにした。 fileNameは拡張子も含んでおく必要があるので注意。

出力先

この方法で出力した場合以下のディレクトリに出力されます。

/data/data/ドメイン.プロジェクト名/files

Androidのバージョンが異なる場合は、別の場所に出力される可能性がありますが未検証です。 今後検証した場合には追記したいと思います。

おわりに

以上でオブジェクトをJSON文字列に変換してAndroidの内部ストレージに出力することができます。 出来るまでなかなか苦労しましたが、出来てみると少ない行数で変換から出力まで出来るので良いですね。 僕は書き出しの回数や種類は多くないのでべた書きでも大丈夫そうですが、回数・種類が多い場合はユーティリティクラスを作って分離した方がスッキリして良さそうです。