2016-08-24 1 views
0

Ich habe tausende von Strings und je nach Inhalt möchte ich sie auf verschiedene RealmObjects Modelle hinzufügen, und ich habe etwa 10 Realm Models,Realm, RealmObjects Modelle dynamisch passieren möglich?

jetzt, was ich so etwas wie dies zu tun:

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 

ich habe mich gefragt, wie dies zu einer einzigen Methode übergeben kann, die Transaktion zu tun, wo ich nur die Zeichenfolge und den Modellklassennamen übergeben würde,

Wie kann ich so etwas wie dies erreichen:

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

} 

und es nennen wie

copyToRealm(ABCModel, string); 

und ich möchte das gleiche tun, wenn wie

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

} 

und durch Modelle Abfrage meine ich die Klasse, die die RealmObject erstreckt.

wenn Sie mehr Informationen benötigen Lemme weiß, dass ich die Frage aktualisieren, Dank

Antwort

1

Dies ist nicht unbedingt eine Realm Frage ehrlich zu sein, würde ich persönlich nur eine ENUM erstellen, die wissen, wie man seine entsprechende Sache zu schaffen und wie man beurteilt, ob das Modell dazu gehört.

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(); 
} 
Verwandte Themen