私のアプリケーション用のデータベースとしてレルムを使用しています。グローバルrealmChangeListenerでどのテーブルが変更されたかを知る
私のデータベースには、Table1、Table2、Table3、Table4、Table5というテーブルはほとんどありません。
テーブルの1つからのデータを表示するテーブルと同じ数のアクティビティがあります。
たとえば、
Activity1は
Activity2は、その対応するテーブルの変更の一部のデータとすぐに、それぞれの活動を更新する表3から表2から
Activity3を表示するであろうデータを、データを表示し、そう
であろう表1からのデータを表示するであろうrealmChangeListenerをrealmインスタンスに登録しました。私はレルムを中央クラスでインスタンス化します。私はRealmChangeListenerをすべての個々のクラスに登録したくはありません。一度それを登録すると、より一層メンテナンスが容易になります。
しかし、RealmChangeListenerのonChangeコールバックでは、Realmオブジェクトが戻ってきて、テーブルが実際に変更されたデータを知る方法がありません。
私はレルムをインスタンス化し、以下のchangeListenerを登録する方法のコードを追加しています。
MyApplication.java
public class MyApplication extends Application{
@Override
public void onCreate() {
super.onCreate();
MainClass mainClass = new MainClass(getApplicationContext());
}
}
MainClass.java
public class MainClass{
public MainClass(Context context){
RealmConfiguration config = new RealmConfiguration.Builder(context).build();
Realm realm = Realm.getInstance(config);
realm.addChangeListener(new RealmChangeListener<Realm>() {
@Override
public void onChange(Realm element) {
//is it possible to know here that data for which table changed?
}
});
}
}
私の目標は、のonChangeコールバックから変更テーブルに関する情報をLocalBroadcastManagerを経由して放送を送信することです。すべてのアクティビティがこのブロードキャストをリッスンし、リスニングアクティビティに関連付けられたテーブルのデータが変更された場合、それ自体が更新されます。活動の残りの部分は放送を無視するだけです。私の目的は、アプリケーション内の1か所からデータベース変更を監視し、データベース変更のために1つのブロードキャストのみを送信することです。データベースの変更を処理するビジネスロジックは、ブロードキャストに含まれる情報に依存します。
私の質問は、グローバルレルムに登録されているRealmChangeListenerでどのテーブルが変更されたかを通知することができますか?そうでない場合は、私がしたいことを達成するための選択肢がありますか?私が働いている
:
レルム - 1.0.1
アンドロイドスタジオ - 2.1.2
分SDK - 19
ターゲットSDK - 23
私はAndroid上で自分のアプリケーションをテストしています5.1.1
ご協力いただきありがとうございます。
すぐにお返事ありがとうございます@Christian Melchior!私は、各アクティビティの領域結果に変更リスナーを登録しようとします。しかし、2番目のアプローチも興味深いようです。助けてくれてありがとう。 – rbing