Convertir ForeignCollection à ArrayList - ORMLite, Gson et Android

Je m'excuse si je ne suis pas super clair avec mon explication, mais je vais ajouter et modifier cette question pour plus de clarté, si demandé.

Je développe une application Android qui reçoit les données via une API externe et stocke les données localement à l'aide de ORMLite. Avant de stocker des données localement et à l'aide ORMLite j'ai eu des modèles qui extrait JSON à partir du serveur et analysé par:

Gson gson = new Gson();

String result = ApiClient.httpPost("/user_route");

User user = gson.fromJson(result, User.class);

L'Utilisateur de la classe a été définie

public class User {
  int id;
  String name;
  ArrayList<Image> media;
}

Et l'Image de la classe:

public class Image {
  int id;
  int creator_id;
  String url;
}

C'est une représentation simplifiée des modèles et des méthodes, mais je crois que j'ai gardé toutes les informations pertinentes. BTW, media est un objet JSON qui contient le Images.

Maintenant, je suis en train de stocker des données localement. Afin d'avoir la relation entre les Utilisateurs et les Images à l'aide de ORMLite il semble que vous avez à employer ForeignCollection classe et @ForeignCollectionField annotation. Je ne crois pas Gson pouvez directement parser le Json pour le media champ dans la classe Utilisateur un ForeignCollection objet, alors j'ai pensé que j'avais besoin de créer deux champs mediaCollection et media.

À l'aide de ORMLite l'Utilisateur de la classe ressemble maintenant à ceci:

@DatabaseTable(tableName = "Users")
public class User {
  @DatabaseField(generatedId = true)
  int id;

  @DatabaseField
  String name;

  @ForeignCollectionField
  ForeignCollection<Image> mediaCollection;

  ArrayList<Image> media;
}

L'Image de la classe avec ORMLite ressemble à ceci:

@DatabaseTable(tableName = "Images")
public class Image {

  @DatabaseField(generatedId = true)
  int id;

  @DatabaseField(foreign=true, foreignAutoCreate=true, foreignAutoRefresh=true)
  private User user;

  @DatabaseField
  int creator_id;

  @DatabaseField
  String url;

}

Comment l'écoulement de l'app est le premier que j'ai frappé la base de données locale pour l'Utilisateur. J'ai effectuer une certaine logique qui détermine ensuite si j'ai besoin de toucher le serveur à "mettre à jour" ou "actualiser" les données de l'Utilisateur.

Si les données localement ou à partir du serveur distant, j'ai besoin d'afficher la Image dans la même vue. Aujourd'hui, l'URL de la Image est stocké dans différents types d'objets selon que les données sont locales ou à distance. Ce que j'aimerais faire, c'est si le Image est stocké dans un ForeginCollection objet, convertir cet objet dans un ArrayList et ensuite avec le reste de mon code qui extrait la Image URL et l'affiche.

Je suppose qu'il ya deux questions.

  1. Est-ce un bon plan ou devrais-je écrire de deux façons distinctes de l'extraction de la Image URL à partir de données, PAS de conversion de l'objet à partir de ForeignCollection à ArrayList?

  2. Si il est un bon plan, comment puis-je convertir un ForeginCollection à un ArrayList?

InformationsquelleAutor wuliwong | 2012-10-02