Edited at

Realmで一意なPrimaryKeyを設定する方法二つ

More than 1 year has passed since last update.


DroidKaigi2017の@zaki50さんによるオフラインファーストなアプリケーション開発より抜粋

@PrimaryKey

public String id = UUID.randomUUID().toString();

この手があったか!っと目から鱗でした。。Contextが取得できる場合ならInstanceID.getInstance(getApplicationContext()).getId();も選択肢にはいるかもしれません。

参照 : 一意の識別子のベストプラクティス


自分でAutoIncrementを書く

Kotlin

inline fun <reified T : RealmObject> getAutoIncrementKey(realm: Realm): Long {

if (realm.where(T::class.java).count() == 0L) return 1
else return realm.where(T::class.java).max("id").toLong() + 1
}

// 呼び出し方 getAutoIncrementKey<Dog>(realm)

Kotlin拡張関数

inline fun <reified T : RealmObject> Realm.getAutoIncrementKey(): Long {

if (where(T::class.java).count() == 0L) return 1
else return where(T::class.java).max("id").toLong() + 1
}

//呼び出し方 realm.getAutoIncrementKey<Dog>()

Java

public int getAutoIncrementKey(Realm realm, Class klass) {

if (realm.where(klass).count() == 0) return 1;
else return realm.where(klass).max("id").intValue() + 1;
}

// 呼び出し方 getAutoIncrementKey(realm, Dog.class)

雑ですが、以上です。