2011-08-23 3 views
9

Sto usando ORMLite nella mia app per Android. Ho bisogno di mantenere questa classe, che ha una HashMap. Qual è un buon modo per persisterlo? È la mia prima volta che cerco di mantenere una HashMap, anche la prima volta con ORMLite, quindi qualsiasi consiglio sarebbe molto apprezzato!Persist HashMap in ORMLite

* Modifica * Se questo fa alcuna differenza, la classe di esercizio è semplicemente una stringa (che funziona anche come id nel database), e la classe Set ha un id int (che è anche id database), int weight e int reps.

@DatabaseTable 
public class Workout { 

    @DatabaseField(generatedId = true) 
    int id; 

    @DatabaseField(canBeNull = false) 
    Date created; 

    /* 
    * The hashmap needs to be persisted somehow 
    */ 
    HashMap<Exercise, ArrayList<Set>> workoutMap; 

    public Workout() {   
    } 
    public Workout(HashMap<Exercise, ArrayList<Set>> workoutMap, Date created){ 
     this.workoutMap = workoutMap; 
     this.created = created; 
    } 

    public void addExercise(Exercise e, ArrayList<Set> setList) { 
     workoutMap.put(e, setList); 
    } 
    ... 
} 

risposta

12

Wow. Persistente a HashMap il cui valore è uno List di Set s. Impressionante.

Quindi in ORMLite è possibile mantenere qualsiasi campo Serializable. Ecco la documentazione sul tipo e come si deve configurarlo:

http://ormlite.com/docs/serializable

Così il vostro campo sarebbe simile:

@DatabaseField(dataType = DataType.SERIALIZABLE) 
Map<Exercise, List<Set>> workoutMap; 

Si prega di notare che se la mappa è affatto grande quindi questo molto probabilmente non sarà molto performante. Inoltre, la classe Exercise (e le classi List e Set) devono implementare Serializable.

Se è necessario cercare questa mappa, è possibile considerare di memorizzare i valori nello Set in un'altra tabella, nel qual caso si potrebbe dare un'occhiata a come persiste ORMLite "foreign objects".

+0

Signore, sei un eroe. Grazie mille! Per la cronaca, avevo anche bisogno di aggiungere "implementazioni serializzabili" alle classi Esercizio e Set. – fred

+0

Buon punto. Ho modificato la mia risposta. Grazie. – Gray

+0

Ciao Gray, ho una domanda relativa alle mappe persistenti: per quanto ne so, solo le raccolte sono supportate in omlite per la persistenza, insieme a raccolte esterne - o sto mixando qualcosa qui? – Ready4Android