2017-09-11 5 views
0

J'essaie d'insérer des données dans la base de données SQLite et que j'ai écrit une méthode simple pour insérer les données que je reçois de l'API comme indiqué ci-dessous:Comment insérer une liste d'objets en utilisant 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; 
    } 

Je reçois pour la dernière

game.original_game_rating(); 

qui est correctement justifiée car il s'agit d'une liste d'objets.

Ma classe d'objet nommé "GameInfoList" qui est passé comme paramètre dans la méthode est illustré ci-dessous:

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

J'ai aussi objet GameRatings comme indiqué ci-dessous:

@Nullable 
public abstract String api_detail_url(); 

public abstract long id(); 

@Nullable 
public abstract String name(); 

Maintenant je veux insérer le nom à l'intérieur du tableau pour le classement du jeu pour lequel j'ai modifié le code comme suit:

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; 
} 

Est-ce exact?

+1

La base de données sqlite stocke uniquement les valeurs primitives. vous avez besoin de le stocker sous forme de texte et le temps de l'utiliser, vous pouvez le convertir en liste –

+0

Quel est votre schéma pour la table dans laquelle vous allez insérer ces données? Plus précisément, quel est le type de données de la colonne identifiée comme "COLUMN_GAME_ORIGINAL_RELEASE_DATE"? – CommonsWare

+0

@CommonsWare Le type de données pour COLUMN_GAME_ORIGINAL_RELEASE_DATE est TEXTE –

Répondre

1

Vous avez deux choix:

  1. se débarrasser de cette colonne et ont GameRatings aller dans une table séparée, par un 1: (?) N relation avec votre GameEntry tableau

  2. Convertir votre List<GameRatings> en texte (par exemple, JSON) et stocker le texte dans la colonne