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


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)

雑ですが、以上です。