1. ホーム
  2. java

[解決済み] Androidルームデータベース。EntityでArraylistを扱うには?

2022-05-13 23:54:45

質問

オフラインでデータを保存するためのRoomを実装したところです。しかし、Entityクラスで、以下のエラーが発生します。

Error:(27, 30) error: Cannot figure out how to save this field into database. You can consider adding a type converter for it.

そして、クラスは以下の通りです。

@Entity(tableName = "firstPageData")
public class MainActivityData {

    @PrimaryKey
    private String userId;

    @ColumnInfo(name = "item1_id")
    private String itemOneId;

    @ColumnInfo(name = "item2_id")
    private String itemTwoId;

    // THIS IS CAUSING THE ERROR... BASICALLY IT ISN'T READING ARRAYS
    @ColumnInfo(name = "mylist_array")
    private ArrayList<MyListItems> myListItems;

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public ArrayList<MyListItems> getMyListItems() {
        return myListItems;
    }

    public void setCheckListItems(ArrayList<MyListItems> myListItems) {
        this.myListItems = myListItems;
    }

}

基本的に私はデータベースにArrayListを保存したいのですが、それに関連するものを見つけることができませんでした。あなたはRoomを使用してArrayを保存する方法に関して私を導くことができますか?

注:MyListItems Pojoクラスは2つの文字列を含んでいます(現在のところ)。

事前にありがとうございます。

どのように解決するのですか?

選択肢1: MyListItems である。 @Entity として MainActivityDataMyListItems を設定すると @ForeignKey に戻る MainActivityData . この場合ですが。 MainActivityData を持つことはできません。 private ArrayList<MyListItems> myListItems のように、エンティティは他のエンティティを参照することはありません。ビューモデルや類似の POJO コンストラクトには MainActivityData とそれに関連する ArrayList<MyListItems> を使用しますが。

オプション2: ペアの @TypeConverter メソッドで ArrayList<MyListItems> を何らかの基本的な型に、あるいは型から変換します(例えば String のような、保存形式としてJSONを使うなどして)。では MainActivityData はその ArrayList<MyListItems> を直接指定することができます。しかし MyListItems に対するクエリーはできません。 MyListItems へのクエリーはうまくいきません。