2017-09-11 15 views
0

私はSQLiteデータベースにデータを挿入しようとしていますし、そのために、私は以下に示すように、私はAPIから取得したデータを挿入するための簡単な方法を書かれている:ContentValues.put()を使ってオブジェクトのリストを挿入するには?

public static ContentValues gameInfoToContentValues(@NonNull GameInfoList game) { 

     ContentValues values = new ContentValues(); 

     values.put(GameEntry.COLUMN_GAME_ID, game.id()); 
     values.put(GameEntry.COLUMN_GAME_ALIASES, game.aliases()); 
     values.put(GameEntry.COLUMN_GAME_API_DETAIL_URL, game.api_detail_url()); 
     values.put(GameEntry.COLUMN_GAME_DATE_ADDED, game.date_added()); 
     values.put(GameEntry.COLUMN_GAME_DATE_LAST_UPDATED, game.date_last_updated()); 
     values.put(GameEntry.COLUMN_GAME_SMALL_IMAGE, game.image().small_url()); 
     values.put(GameEntry.COLUMN_GAME_MEDIUM_IMAGE, game.image().medium_url()); 
     values.put(GameEntry.COLUMN_GAME_HD_IMAGE, game.image().super_url()); 
     values.put(GameEntry.COLUMN_GAME_NAME, game.name()); 
     values.put(GameEntry.COLUMN_GAME_ORIGINAL_RELEASE_DATE, game.original_game_rating()); 

     return values; 
    } 

私は最後

のために取得しています
game.original_game_rating(); 

これはオブジェクトのリストであるため、正しく正当化されます。

以下の通りであるメソッドのパラメータとして渡される "GameInfoList" という名前の私のオブジェクトクラス:

public abstract long id(); 

@Nullable 
public abstract String aliases(); 

@Nullable 
public abstract String api_detail_url(); 

@Nullable 
public abstract String date_added(); 

@Nullable 
public abstract String date_last_updated(); 

@Nullable 
public abstract GameImages image(); 

@Nullable 
public abstract String name(); 

@Nullable 
public abstract List<GameRatings> original_game_rating(); 

EDIT

下図のように、私もGameRatingsオブジェクトを持っている:

@Nullable 
public abstract String api_detail_url(); 

public abstract long id(); 

@Nullable 
public abstract String name(); 

ここでは、ゲームの評価用の名前を表の中に挿入します。この名前は、コードを次のように変更しました。

public static ContentValues gameInfoToContentValues(@NonNull GameInfoList game) { 

    ContentValues values = new ContentValues(); 

    if(game.original_game_rating() != null) { 
     for(GameRatings ratings : game.original_game_rating()) { 
      values.put(GameEntry.COLUMN_GAME_ID, game.id()); 
      values.put(GameEntry.COLUMN_GAME_ALIASES, game.aliases()); 
      values.put(GameEntry.COLUMN_GAME_API_DETAIL_URL, game.api_detail_url()); 
      values.put(GameEntry.COLUMN_GAME_DATE_ADDED, game.date_added()); 
      values.put(GameEntry.COLUMN_GAME_DATE_LAST_UPDATED, game.date_last_updated()); 
      values.put(GameEntry.COLUMN_GAME_SMALL_IMAGE, game.image().small_url()); 
      values.put(GameEntry.COLUMN_GAME_MEDIUM_IMAGE, game.image().medium_url()); 
      values.put(GameEntry.COLUMN_GAME_HD_IMAGE, game.image().super_url()); 
      values.put(GameEntry.COLUMN_GAME_NAME, game.name()); 
      values.put(GameEntry.COLUMN_GAME_ORIGINAL_GAME_RATING, ratings.name()); 
     } 
    } 

    return values; 
} 

これは正しいですか?

+1

sqliteデータベースにはプリミティブ値のみが格納されます。それをテキストとして保存する必要がありますし、リストを使用してリストに変換することができます –

+0

このデータを挿入するテーブルのスキーマは何ですか?具体的には、「COLUMN_GAME_ORIGINAL_RELEASE_DATE」と指定された列のデータ型は何ですか? – CommonsWare

+0

@CommonsWare COLUMN_GAME_ORIGINAL_RELEASE_DATEのデータ型はTEXTです。 –

答えて

1

次の2つの選択肢があり:

  1. をその列を取り除くと1を通じて、別のテーブルに行くGameRatingsていなさい:NあなたGameEntryテーブルとの関係

  2. はあなたを変換します(?) List<GameRatings>をテキスト(例:JSON)に変換し、テキストを列に格納します。

関連する問題