【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型に変換することで問題なく使用することができました。