Disculpa si no soy muy claro con mi explicación, pero añadiré y editaré esta pregunta para mayor claridad si así lo solicita.Convierte ForeignCollection a ArrayList - ORMLite, Gson y Android
Estoy desarrollando una aplicación para Android que recibe datos a través de una API externa y almacena datos localmente usando ORMLite. Antes de almacenar datos localmente y utilizar ORMLite tuve modelos que recuperan JSON desde el servidor y Analizada vía:
Gson gson = new Gson();
String result = ApiClient.httpPost("/user_route");
User user = gson.fromJson(result, User.class);
se definió la clase de usuario
public class User {
int id;
String name;
ArrayList<Image> media;
}
Y la clase Image:
public class Image {
int id;
int creator_id;
String url;
}
Esta es una representación simplificada de los modelos y métodos, pero creo que he conservado toda la información relevante. Por cierto, media
es un objeto JSON que contiene el Images
.
Ahora intento también almacenar los datos localmente. Para tener la relación entre Usuarios e Imágenes usando ORMLite, parece que tienes que emplear la clase ForeignCollection y la anotación @ForeignCollectionField. No creo que Gson pueda analizar directamente el Json para el campo media
en la clase User como un objeto ForeignCollection, así que pensé que necesitaba crear dos campos mediaCollection
y media
.
Usando ORMLite la clase de usuario ahora se ve así:
@DatabaseTable(tableName = "Users")
public class User {
@DatabaseField(generatedId = true)
int id;
@DatabaseField
String name;
@ForeignCollectionField
ForeignCollection<Image> mediaCollection;
ArrayList<Image> media;
}
La clase de imágenes con ORMLite se parece a esto:
@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;
}
¿Cómo funciona el flujo de la aplicación es el primer golpeo local base de datos para un usuario. Realizo un poco de lógica que luego determina si necesito presionar el servidor para 'actualizar' o 'actualizar' los datos del usuario.
Si los datos vienen localmente o desde el servidor remoto, necesito mostrar el Image
en la misma vista. Tal como está ahora, la URL para el Image
se almacena en diferentes tipos de objetos dependiendo de si los datos son locales o remotos. Lo que me gustaría hacer es si el Image
está almacenado en un objeto ForeginCollection
, convierta ese objeto en un ArrayList
y luego proceda con el resto de mi código que extrae el URL Image
y lo muestra.
Supongo que hay dos preguntas.
Es este un buen plan o debo escribir dos maneras completamente separadas de la extracción de la URL
Image
partir de los datos, NO convertir el objetoForeignCollection
-ArrayList
?Si es un buen plan, ¿Cómo se convierte un
ForeginCollection
a unArrayList
?
ver la respuesta en otro hilo relacionado: http://stackoverflow.com/a/31598771/3495371 –