我为employee,Student等实体在领域中创建了以下类,并将其同步状态存储在SyscInfo类中
Employee extends RealmObject
_id
name
phone
address
isSync
Student extends RealmObject
_id
name
phone
isSync
SyncInfo extends RealmObject
isSync
timestamp
现在,如果未同步任何员工记录或学生记录,我将syncInfo.isSync
设置为false
我的后台调度程序将检查我们是否有任何离线/未同步的数据存储在领域db中。为此,我向员工和学生发出查询。
RealmList<Employee> offlineEmployeeList = realm.where(Employee.class).equalTo("syncInfo.isSync",false).findAllAsync();
RealmList<Student> offlineEmployeeList = realm.where(Student.class).equalTo("syncInfo.isSync",false).findAllAsync();
所以我正在寻找的是,我们是否有任何通用的方法来检查离线/未同步的数据,而无需检查每个实体,即员工和学生。 明天,如果再引入一个实体,我将不得不再次发起相同的查询。
答案 0 :(得分:2)
您可以创建以下通用方法:
private <T extends RealmModel> RealmResults<T> getNotSynced(Class<T> modelClass) {
return realm.where(modelClass).equalTo("isSynced", false).findAll();
}
并像这样使用它:
Set<Class<? extends RealmModel>> realmObjectClasses = realm.getConfiguration().getRealmObjectClasses();
ArrayList<RealmResults> notSynched = new ArrayList<>();
for(Class modelClass: realmObjectClasses) {
notSynched.add(getNotSynced(schemaClasses));
}
// Now you have an array of RealmResults with non-synched RealmObjects
关于查询方法,
我将使用findAll()
方法并在后台线程上执行小孔操作,而不 findAllAsync()
,后来我需要更复杂的同步
更新
如果不是所有RealmObjects都具有isSynced
字段,这就是我要做的事情:
RealmObjects有一些限制,但是您可以实现一个空接口,因此我将使用该接口来标识可同步对象,并仅对它们使用getNotSynced
方法:
创建一个空接口:
public interface Syncable {}
使用所有可同步的RealmObject对其进行实现:
Employee extends RealmObject implements Syncable {
...
}
然后使用它从之前过滤for循环中的类:
for(Class modelClass: realmObjectClasses) {
if (Syncable.class.isAssignableFrom(modelClass)) {
notSynched.add(getNotSynced(schemaClasses));
}
}