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

```

    public class MapArea extends RealmObject {
        @PrimaryKey
        public long id;
        public String name;
    }
    
```

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

```

    public class Play extends RealmObject {
        @PrimaryKey
        public long id;
        public Date date;
        public MapArea mapArea;
    }
    
```

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

ここで，マップ情報は予め入力済みのレコードを使用したいのですが，アプリのアップデート時にマップを追加する可能性があります．  
`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で入力済みデータを設定，更新する方法
```

    RealmConfiguration.Builder.assetFile()
    
```

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

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

```

    realm.executeTransaction()
    
```

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

他にも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