ポンコツエンジニアの学習メモ

Androidアプリ開発初心者です、自分で勉強してわかった内容などを投稿しています。

【Kotlin】RealmでURIを保存して使用する

概要
取得した画像のURIをRealmで保存および使用する方法で詰まってしまったので、私が解決した方法について書いていきたいと思います。

経緯
取得した画像のURIをRealmデータベースに保存したかったので
データを格納するモデルを以下のようにして、Uri型のデータを格納できるかなとやってみたところ

~
open class <モデルのクラス名> : RealmObject() {
    var <プロパティ名>: Uri? = null
}

コンパイル時に以下のメッセージが表示されてコンパイルできず…

Execution failed for task ':app:kaptDebugKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution
> java.lang.reflect.InvocationTargetException (no error message)

どうやらRealmにはUri型のデータは格納できないようなので以下の方法で問題を解決しました。

保存
Uri型のデータがRealmデータベースに保存できないため、String型で保存することにしました。
モデルを以下のように書き換え

~
open class <モデルのクラス名> : RealmObject() {
    var <プロパティ名>: String = null
}

Uri型のデータをString型に変換して格納しました。

~
realm.executeTransactionAsync { db: Realm ->
val Item = db.createObject<<モデルのクラス名>>(<格納先のID番号>)
Item.<プロパティ名> = <Uri型のデータ名>.toString()
}
~

このようにするとエラーなくコンパイルすることができ、Realmデータベースに画像のURIを保存することができました。

使用

データを取り出してURIとして使用する際は

~
val Item = realm.where<<モデルのクラス名>>().equalTo("id", <取り出したいデータ格納先のID番号>).findFirst()
<Uri型の変数> = Uri.parse(Item?.<プロパティ名>)
~

このように、Uri型に変換することで問題なく使用することができました。