2016-08-24 6 views
0

今、私はこのような何かをやって何を、Realm、RealmObjectsモデルを渡すダイナミックに可能なモデルですか?

を私は文字列の数千を持っているし、内容に応じて、私は別の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

、私は質問を更新します知っている、私は個人的にちょうどそれに対応するものを作成する方法を知っている列挙型を作成しますそのモデルがそのモデルに属しているかどうかを評価する方法。

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(); 
} 
関連する問題