基本的なRealmの実装の方法についてまとめます。
今回は現在作成しているアプリのコードを使って説明していきます。
⒈事前準備
まず始めに、build.gradleファイルにclasspathを追加します。
uildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.2'
classpath "io.realm:realm-gradle-plugin:5.1.0"
}
}
上記のコードの「classpath "io.realm:realm-gradle-plugin:5.1.0"」が追加した部分です。
⒉オブジェクトの定義
次にRealmObjectのサブクラスを作成し、オブジェクトを定義します。
public class Recipe extends RealmObject {
@PrimaryKey
int id;
@Required
private String name;
@Required
private String cookingTime;
プライマリキーを使うことで、オブジェクトの作成と更新は少し遅くなりますが、検索は速くなります。
複数のフィールドをプライマリキーとして指定することはできません。
定義した後は、getterとsetterを用意します。
public int getId() {
return id;
}
public void setName(String name) {
this.name = name;
}
public void setCookingTime(String cookingTime) {
this.cookingTime = cookingTime;
}
public void setId(int id) {
this.id = id;
}
}
⒊モデルの定義
次にモデルを定義します。
新規作成と編集の更新は次のように行います。
プライマリキーを指定したモデルは、copyToRealmOrUpdate()を使ってオブジェクトを作成または更新をすることができます。
public class RecipeModel {
private Realm mRealm = Realm.getDefaultInstance();
/**
* レシピの新規作成もしくは編集の更新
*
* @param recipeId レシピのid
* @param recipeName レシピの名前
* @param cookingTime 調理時間
*/
public void copyOrUpdate(@Nullable Integer recipeId, String recipeName, String cookingTime) {
if (recipeId == null) {
recipeId = makeRecipeId();
}
Recipe recipe = new Recipe();
recipe.setId(recipeId);
recipe.setName(recipeName);
recipe.setCookingTime(cookingTime);
mRealm.beginTransaction();
mRealm.copyToRealmOrUpdate(recipe);
mRealm.commitTransaction();
}
idがnullの場合に新規作成を行います。
削除は次のように行います。
/**
* レシピの削除
*
* @param recipeId レシピのid
*/
public void deleteRecipe(int recipeId) {
mRealm.beginTransaction();
// レシピの一覧から、recipeIdと一致するidのレシピの中で最初のものを取り出す
Recipe recipe = mRealm.where(Recipe.class).equalTo("id", recipeId).findFirst();
if (recipe != null) {
recipe.deleteFromRealm();
}
mRealm.commitTransaction();
}
まとめ
①build.gradleファイルにclasspathを追加
②オブジェクトの定義
③モデルの定義
この3つのステップでRealmでは簡単にデータベースを実装できます。
是非試してみてください。