2016-08-24 147 views
0

我有成千上萬的字符串,並根據內容我想將它們添加到不同的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(); 
}