安卓领域。io[Java]通知如何仅侦听特定表中的更改?
我在realm java文档中看到了这个示例代码
public class MyActivity extends Activity {
private Realm realm;
// A reference to RealmChangeListener needs to be held to avoid being
// removed by the garbage collector.
private RealmChangeListener realmListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
realm = Realm.getDefaultInstance();
reamlListener = new RealmChangeListener() {
@Override
public void onChange() {
// ... do something with the updates (UI, etc.) ...
}};
realm.addChangeListener(realmListener);
}
@Override
protected void onDestroy() {
super.onDestroy();
// Remove the listener.
realm.removeChangeListener(realmListener);
// Close the realm instance.
realm.close();
}
}
我有一些数据库模式包含几个表。这些表中的数据总是在变化,但我只有一个表需要监听并刷新与该表相关的UI。我不想检查的是,在任何其他领域对象中进行任何小的更新之后,领域中的这些更改是否正好在通缉表中。 你能推荐什么样的最佳实践
# 1 楼答案
在Realm拥有细粒度通知之前,我将通过使用ContentObserver、RxJava或您自己的Observer接口来实现自己的通知系统
# 2 楼答案
正如Christian RxJava所说,他能帮上忙。当然,这是一个可能需要对代码进行重大修改的概念,而不是具体而快速地解决问题。在任何情况下,访问数据库的存储库模式都是良好的做法。您可以使用自己的层来访问
Realm
。在这种情况下,您可以控制对Realm
的查询,并在数据更改时通知观察者使用Realm interface repository可以确保控制所有请求
现在,您将获得
Observable<T>
对象,并可以在数据发生更改时发出通知当make
get query
时,只需保存实体(表)、谓词(nicerx.functions.Func1
)和主语。当您要更改Realm
中的数据时,您可以使用保存的谓词获取更改的数据,并通知所有观察者有关更改的信息示例
get query
在我看来,被动应对是解决这个问题的自然方法
关于GitHub的完整示例代码您可以尝试使用该示例。目前,这并不是一个完整的解决方案(没有通知取消订阅等),而只是一个想法