2011-08-23 6 views
9

私のAndroidアプリでORMLiteを使用しています。私はHashMapを持つこのクラスを永続化する必要があります。それを永続させる良い方法は何ですか?初めてORMiteを使って初めてHashMapを維持しようとしましたので、アドバイスをいただければ幸いです!またのidですORMLiteでHashMapを維持する

* 編集 * それはどんな違いを行った場合、エクササイズクラスは、単に文字列である(また、データベース内のidとして動作すること)、およびSetクラスは、int型のIDを持っています(データベース)、int weightおよび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); 
    } 
    ... 
} 

答えて

12

ワウ。 の値がList,Setsであることを維持します。印象的な。

ORMLiteには、Serializableフィールドをそのまま使用できます。ここではタイプについてのドキュメントだとどのようにそれを設定する必要があります。

http://ormlite.com/docs/serializable

だからあなたのフィールドのようなものになります。

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

に注意してくださいをそのマップの場合大規模である場合、これはおそらくそれほど高性能ではないでしょう。また、Exerciseクラス(ListSetクラス)はSerializableを実装する必要があります。

このマップを検索する必要がある場合は、Setの値を別のテーブルに格納することを検討することができます。この場合、ORMLiteがどのようにして"foreign objects"を保持しているかを見てください。

+0

あなたはヒーローです。どうもありがとうございます!レコードのために、私はまた、 "シリアライズ可能な実装"をエクササイズクラスとセットクラスに追加する必要がありました。 – fred

+0

良い点。私は私の答えを編集しました。ありがとう。 – Gray

+0

こんにちはグレー、私は永続的なマップに関連する質問があります:私が知っている限り、コレクションは永続性のためにormliteで、外国人のコレクションと共にサポートされていますか? – Ready4Android

関連する問題