27717


Realmを利用し，ゲーム履歴管理アプリを作成しようとしています．  
具体的には

[code]

    public class MapArea extends RealmObject {
        @PrimaryKey
        public long id;
        public String name;
    }
    
[/code]

のようなマップ情報を予め持ち

[code]

    public class Play extends RealmObject {
        @PrimaryKey
        public long id;
        public Date date;
        public MapArea mapArea;
    }
    
[/code]

のようなプレイ情報を記録したいと考えています．

ここで，マップ情報は予め入力済みのレコードを使用したいのですが，アプリのアップデート時にマップを追加する可能性があります．  
`RealmConfiguration.Builder.assetFile()`により初期データをassetsよりコピーすることができることは判明したのですが，マップ追加時にデータを追従させる方法がわかりませんでした．

Realmデータベースに対し入力済みデータを与え，かつそれをアプリアップデート時に更新するにはどのようにしたらよいでしょうか？


CC BY-SA 3.0
2016-07-18T16:45:28.580
27713
2016-07-21T04:17:39.960
17202
question
android realm
Realmで入力済みデータを設定，更新する方法

[code]

    RealmConfiguration.Builder.assetFile()
    
[/code]

は初期化時のデータ挿入に利用できそうですが、アップデート時には難しそうです。

そこで、「入力済みデータ」はjsonやcsvで用意し、アプリアップデート時に

[code]

    realm.executeTransaction()
    
[/code]

などで追記や更新処理をするのが良いと思います。

他にもrealmならではの手法があるかもしれませんが、最低限実現可能な方法だと思います。


CC BY-SA 3.0
2016-07-19T01:03:44.863
27717
2016-07-19T01:03:44.863
354
27713
answer


例えばversionCodeをどこかに保持しておいてアプリ起動の度にアプリのversionCodeと比較し、アプリのアップデートを検知して追加更新処理をするのはどうでしょうか。


CC BY-SA 3.0
2016-07-19T05:46:39.647
27726
2016-07-19T05:46:39.647
14540
27713
answer


他には、アプリ更新でMapAreaに追加があった場合はRealmのスキーマバージョンをインクリメントしてしまう方法もあるかと思います。

こうすることでマイグレーション処理が走るので、その中で増えた分のMapAreaをinsertすることができます。


CC BY-SA 3.0
2016-07-21T04:17:39.960
27785
2016-07-21T04:17:39.960
319
27713
answer