Realm インスタンス化とClose

 ・Realmのインスタンス化

 // Initialize Realm

 Realm.init(context);

 // Get a Realm instance for this thread

 Realm realm = Realm.getDefaultInstance();


・設定のカスタマイズ

 // 最小の設定

 RealmConfiguration config = new RealmConfiguration.Builder().build();

 // ビルダーパターンでRealmConfigurationを作成する。

 // "myrealm.realm"という名前でContext.getFilesDir()の場所にファイルを作成する。

 RealmConfiguration config = new RealmConfiguration.Builder()

               .name("myrealm.realm")

               .encryptionKey(getKey())

               .schemaVersion(42)

               .modules(new MySchemaModule())

               .migration(new MyMigration())

               .build();

 // 設定に従ったRealmを取得します

 Realm realm = Realm.getInstance(config);


・デフォルト設定

 Applicationクラスでデフォルト設定を行うと

 アプリケーション全体で同じ設定のRealmを使用できる。


 public class MyApplication extends Application {

  @Override

  public void onCreate() {

   super.onCreate();

   // The Realm file will be located in Context.getFilesDir() with name "default.realm"

   Realm.init(this);

   RealmConfiguration config = new RealmConfiguration.Builder().build();

   Realm.setDefaultConfiguration(config);

  }

 }


 public class MyActivity extends Activity {

  @Override

  protected void onCreate(Bundle savedInstanceState) {

   super.onCreate(savedInstanceState);

   Realm realm = Realm.getDefaultInstance();

   try {

    // ... Realmを使用した処理 ...

   } finally {

    realm.close();

   }

  }

 }


・同期されたRealmを開く

 SyncConfigurationを使う。


 SyncCredentials myCredentials = SyncCredentials.usernamePassword("bob", "greatpassword", true);

 SyncUser user = SyncUser.login(myCredentials, serverUrl());

 SyncConfiguration config = new SyncConfiguration.Builder(user, realmUrl())

               .schemaVersion(SCHEMA_VERSION)

               .build();

 // Use the config

 Realm realm = Realm.getInstance(config);


・非同期にRealmを開く

 RealmConfiguration config = new RealmConfiguration.Builder()

               .schema(42)

               .migration(new MyMigration()) // Potentially lengthy migration

               .build();

 RealmAsyncTask task = Realm.getInstanceAsync(config, new Realm.Callback() {

  @Override

  public void onSuccess(Realm realm) {

   // Realm is opened and ready on the caller thread.

  }

 });


・初回ダウンロード

 最初にリモートのデータを全てダウンロード完了してから

 Realmを使用したい場合、getInstanceAsync()をwaitForRemoteInitialData()と

 組み合わせて使用する。


 SyncUser user = getUser();

 String url = getUrl();

 SyncConfiguration config = new SyncConfiguration.Builder(user, url)

               .waitForRemoteInitialData();

               .build();

 RealmAsyncTask task = Realm.getInstanceAsync(config, new Realm.Callback() {

  @Override

  public void onSuccess(Realm realm) {

   // Realm is now downloaded and ready. New changes to Realm will continue

   // to be synchronized in the background as normal.

  }

 });


・データをメモリ上に保持する。

 RealmConfiguration myConfig = new RealmConfiguration.Builder()

                .name("myrealm.realm")

                .inMemory()

                .build();


・Realmを閉じる

 2回 getInstance()を呼んだ場合は、close()も2回呼ぶ必要がある。


 Realm realm = Realm.getDefaultInstance();

 try {

  // ... Realmインスタンスを使用するコード ...

 } finally {

  realm.close();

 }