2017-06-06 3 views
2

私は部屋のライブラリを使用して保存したいVideoListオブジェクトを持っていますが、Public List list = nullで@Embeddedを使用しようとすると、エラー:(23、24)エラー:このフィールドをデータベースに保存する方法を見つけることができません。あなたはそれのためのタイプコンバータを追加することを検討することができます。ルームパーシスタンスライブラリ - List <Video>のネストされたオブジェクト、@Embeddedは機能しません。

VideoListクラスは次のとおりです。

@Entity 
public class VideoList { 


@PrimaryKey 
public String id; 

public String title; 
public String viewType; 
public Integer sortingOrder = null; 
public String componentSlug; 
public String endPoint = null; 

@Embedded 
public List<Video> list = null; 
public boolean hidden = false; } 




Any suggestions? 
+0

私は '@埋め込み 'はプリミティブでのみ動作し、' VideoList'のためにテーブルの個々のカラムに入るものだと思います。 AFAIKの場合、独自のテーブルと[リストに戻る外部キー]を持つ 'Video'エンティティが必要です(https://developer.android.com/topic/libraries/architecture/room.html#entities-relationships )。 – CommonsWare

+0

答えはhttps://stackoverflow.com/questions/44330452/android-persistence-room-cannot-figure-out-how-to-read-this-field-from-a-curso?answertab=votes#tab-トップ –

+0

お探しのものは[this](https://stackoverflow.com/questions/44330452/android-persistence-room-cannot-figure-out-how-to-read-this-field-from-a- –

答えて

1

このようなネストされたリストオブジェクトでは、Convertorが最適なソリューションだと思います。

public class Converter { 

public static String strSeparator = "__,__"; 

@TypeConverter 
public static String convertListToString(List<Video> video) { 
    Video[] videoArray = new Video[video.size()]; 
    for (int i = 0; i <= video.size()-1; i++) { 
     videoArray[i] = video.get(i); 
    } 
    String str = ""; 
    Gson gson = new Gson(); 
    for (int i = 0; i < videoArray.length; i++) { 
     String jsonString = gson.toJson(videoArray[i]); 
     str = str + jsonString; 
     if (i < videoArray.length - 1) { 
      str = str + strSeparator; 
     } 
    } 
    return str; 
} 

@TypeConverter 
public static List<Video> convertStringToList(String videoString) { 
    String[] videoArray = videoString.split(strSeparator); 
    List<Video> videos = new ArrayList<Video>(); 
    Gson gson = new Gson(); 
    for (int i=0;i<videoArray.length-1;i++){ 
     videos.add(gson.fromJson(videoArray[i] , Video.class)); 
    } 
    return videos; 
} 

}

+0

入れ子オブジェクト用のコンバータを使用しようとしましたが、処理時間が大幅に増えました(改造レスポンスよりも遅くても)、パフォーマンスが悪いことを意味します。 –

+0

私は見る!面白い。それは私にとってはあまり変わらなかった。たとえば、あなたは正しいと思いますが、あなたは何を提案していますか? @relationで何か? –

+0

私はこの状況のた​​めのより良い回避策を見つけられませんでした。ちょっと待ってください。私の現在の作品は、本当に良い、非常に速く、とても簡単に、レルムを使用しています。 –

0

倍の大半あなたは彼らが複雑なオブジェクトであるため、文字列を生成するためにコンバータを使用することはできません!

答えを繰り返さないようにするには、もう1つ同じ質問で私のanswerを読むことができます。

関連する問題