领域,动态传递RealmObjects模型?

时间:2016-08-24 13:33:38

标签: android realm

我有成千上万的字符串,根据内容我想将它们添加到不同的RealmObjects模型,我有大约10个领域 模型,

现在我做的是这样的事情:

if (string.contains("abc")) {
        mRealm.beginTransaction();
        mRealm.copyToRealmOrUpdate(new ABCModel(string));
        mRealm.commitTransaction();
    }

if (string.contains("xyz")) {
    mRealm.beginTransaction();
    mRealm.copyToRealmOrUpdate(new XYZModel(string));
    mRealm.commitTransaction();
}

// and so on

我想知道如何将此传递给单个方法来执行事务,我只需传递字符串和模型类名称,

我怎样才能实现这样的目标:

private void copyToRealm(RealmModel model, String string){
    mRealm.beginTransaction();
    mRealm.copyToRealmOrUpdate(new model(string));
    mRealm.commitTransaction();

}

并将其称为

copyToRealm(ABCModel, string);

我想在查询

时也这样做
public RealmResults<?> queryChemistry(RealmModel model, String year) {
    return realm.where(model.class)
            .contains("Title", "string")
            .findAll();

}

和模型我指的是扩展RealmObject

的类

如果您需要更多信息,请知道我会更新问题,谢谢

1 个答案:

答案 0 :(得分:1)

说实话,这并不是一个严格的Realm问题,我个人只会创建一个知道如何创建相应内容以及如何评估该模型是否属于它的枚举。

public enum Models {
    ABC {
        @Override
        public boolean evaluateIfModel(String input) {
            return input.contains("abc");
        }

        @Override
        public RealmModel createModel(String input) {
            return new ABCModel(input);
        }
    };

    public abstract boolean evaluateIfModel(String input);
    public abstract RealmModel createModel(String input);
}

for(Models model : Models.values()) {
    if(model.evaluateIfModel(input)) {
        final _model = model;
        realm.executeTransaction(new Realm.Transaction() {
            @Override
            public void execute(Realm realm) {
                realm.copyToRealmOrUpdate(_model.createModel(input));
            }
        });
        break;
    }
}

public <T extends RealmModel> RealmResults<T> queryChemistry(T model, String year) {
    return realm.where(model.getClass())
            .contains("Title", "string")
            .findAll();
}