Приносим извинения, если я не буду полностью разбираться в своих объяснениях, но я добавлю и отредактирую этот вопрос для ясности, если потребуется.
Я разрабатываю приложение для Android, которое получает данные через внешний API и локально хранит данные с использованием ORMLite. До хранения данных на локальном компьютере и с использованием ORMLite у меня были модели, которые извлекли JSON с сервера и проанализировали его с помощью:
Gson gson = new Gson();
String result = ApiClient.httpPost("/user_route");
User user = gson.fromJson(result, User.class);
Определен класс пользователя
public class User {
int id;
String name;
ArrayList<Image> media;
}
И класс Image:
public class Image {
int id;
int creator_id;
String url;
}
Это упрощенное представление моделей и методов, но я считаю, что я сохранил всю необходимую информацию. BTW, media
- это объект JSON, который содержит Images
.
Теперь я пытаюсь также хранить данные локально. Чтобы иметь отношения между пользователями и изображениями с использованием ORMLite, кажется, вам нужно использовать класс ForeignCollection и аннотацию @ForeignCollectionField. Я не верю, что Gson может напрямую разобрать Json для поля media
в классе User как объект ForeignCollection, поэтому мне показалось, что мне нужно создать два поля mediaCollection
и media
.
Используя ORMLite, теперь класс User выглядит следующим образом:
@DatabaseTable(tableName = "Users")
public class User {
@DatabaseField(generatedId = true)
int id;
@DatabaseField
String name;
@ForeignCollectionField
ForeignCollection<Image> mediaCollection;
ArrayList<Image> media;
}
Класс Image с ORMLite выглядит так:
@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;
}
Как работает поток приложения, сначала я попал в локальную базу данных для пользователя. Я выполняю некоторую логику, которая затем определяет, нужно ли мне на самом деле нажимать на сервер для "обновления" или "обновления" данных пользователя.
Если данные поступают локально или с удаленного сервера, мне нужно отобразить Image
в том же представлении. В настоящее время URL-адрес Image
хранится в разных типах объектов в зависимости от того, являются ли данные локальными или удаленными. Я бы хотел сделать, если Image
хранится в объекте ForeginCollection
, преобразует этот объект в ArrayList
, а затем продолжит работу с остальным кодом, который извлекает URL Image
и отображает его.
Я думаю, есть два вопроса.
-
Является ли это хорошим планом или мне нужно написать два совершенно разных способа извлечения URL-адреса
Image
из данных, НЕ преобразовывая объект изForeignCollection
вArrayList
? -
Если это хороший план, как мне преобразовать
ForeginCollection
вArrayList
?