2011-08-23 17 views
9

Im używać ORMLite w mojej aplikacji na Androida. Muszę utrzymywać tę klasę, która ma HashMap. Jaki jest dobry sposób na utrzymanie go? To mój pierwszy raz, kiedy próbowałem utrzymać HashMap, także po raz pierwszy z ORMLite, więc każda rada byłaby bardzo cenna!Persist HashMap w ORMLite

* Edit * Jeśli to czyni żadnej różnicy, klasa ćwiczenia jest po prostu String (który działa również jako ID w bazie danych), a klasa Zestaw posiada int Identyfikator (który jest również id w baza danych), waga int i int.

@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); 
    } 
    ... 
} 

Odpowiedz

12

Wow. Trwałe HashMap którego wartość to List z s. Imponujący.

Tak więc w ORMLite można przechowywać dowolne pole Serializable. Oto dokumentacja o rodzaju i jak trzeba go skonfigurować:

http://ormlite.com/docs/serializable

Więc pole będzie wyglądać następująco:

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

Zwróć uwagę że jeśli mapie jest w ogóle duży, to najprawdopodobniej nie będzie bardzo wydajny. Ponadto, klasa Exercise (i klasy List i Set) wymagają implementacji Serializable.

Jeśli chcesz przeszukać tę mapę, możesz rozważyć zapisanie wartości w numerze Set w innej tabeli. W takim przypadku warto przyjrzeć się, jak działa ORMLite "foreign objects".

+0

Proszę pana, jesteś bohaterem. Dziękuję bardzo! Dla potrzeb zapisu, musiałem także dodać "narzędzia Serializable" do klas ćwiczeń i zestawu. – fred

+0

Dobra uwaga. Edytowałem swoją odpowiedź. Dzięki. – Gray

+0

Witaj Grey, mam pytanie związane z uporczywymi mapami: O ile mi wiadomo, tylko kolekcje są obsługiwane w ormlite dla wytrwałości, wraz z zagranicznymi kolekcjami - czy mieszam coś tutaj? – Ready4Android