Realm Java 3.4 - 逆方向の関連に対するクエリーとデータ同期進捗リスナーをサポート
本日、Realm Java 3.4をリリースしました。今回のリリースでは、逆方向の関連に対するクエリーのための機能とデータ同期の進捗に対するリスナーのサポートが追加されました。これらについて詳しく解説していきます。
逆方向の関連に対するクエリー
Realm Java 3.1では、新機能として@LinkingObjects
アノテーションを使った逆方向の関連をベータ版としてリリースしました。今回のバージョン3.4では、この逆方向の関連をRealmList
やRealmObject
と同じようにクエリー中で使用できるようにしました。
public class Person extends RealmObject {
public String name;
public Dog dog;
}
public class Dog extends RealmObject {
public String name;
@LinkingObjects
public final RealmResults<Person> owners = null;
}
// RealmListと同じように、逆方向の関連を使ったクエリー
Person owner = realm.where(Dog.class).equalTo("owners.name", "Jane").findFirst();
@LinkingObjects
に対するクエリーはRealmList
に対するこれまでのリンククエリーと同じように使うことができます。また、この機能が実装されたことにより@LinkingObjects
機能はベータ版としての位置づけを終え、正式版なAPIとして取り扱われます。
データ同期進捗リスナー
Realm Mobile Platformが提供するオフラインファーストのための機能により、行った変更はネットワークの状態にかかわらず即座にローカルなRealmへ適用されます。ネットワークが利用可能になると、バックグラウンドで自動的にデータの同期が行われ、サーバーと他のデバイスに変更が伝搬します。このことにより、Realm Drawのようなリアルタイムに協調動作をするアプリケーションを作ることができます。
このように自動的に行われるデータ同期ですが、場合によっては同期すべきデータがどの程度残されているかを把握したい場合もあります。たとえば、アプリの初回起動時に、表示に必要なデータの同期がどの程度で完了するかを表示するような場合や、初回起動時に限らず、同期のプログレスバーを表示することでデータ同期中であることをユーザーに伝えるような場合です。
これらを実現できるようにするため、ProgressListener
をSyncSession
に対して登録することでデータ同期の進捗状況を取得できるようにAPIを拡張しました。
Realm realm = Realm.getInstance(config)
writeData(realm);
SyncSession session = SyncManager.getSession(config);
// Realmに書き込んだイメージデータのアップロードのプログレスを表示
showProgressBar();
session.addUploadProgressListener(ProgressMode.CURRENT_CHANGES, new ProgressListener() {
@Override
public void onChange(Progress progress) {
if (progress.isTransferComplete()) {
hideProgressBar();
session.removeProgressListener(this);
} else {
updateProgressBar(progress.getFractionTransferred());
}
}
});
// サーバーからのダウンロードが発生するたびにダウンロード中を示すUIヒントを表示
session.addDownloadProgressListener(ProgressMode.INDEFINITELY, new ProgressListener() {
@Override
public void onChange(Progress progress) {
showDownloadingChanges(!progress.isTransferComplete());
}
});
注意点としては、現時点ではプログレスリスナーを登録できるのはRealmインスタンスがオープンされている間だけに限られているという点です。
本バージョンでの変更の一覧は、CHANGELOGを参照してください。
お読みいただきありがとうございます。 Realmで素晴らしいアプリケーションを作りましょう!お困りの際はStack Overflow(日本語)、 Slack(日本語)、Twitter(日本語)、GitHub(英語)でご相談ください。