如果我对我的解释不是很清楚,我深表歉意,但如果需要,我会添加并编辑这个问题以便清楚起见。
我正在开发一个 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;
}
和图像类:
public class Image {
int id;
int creator_id;
String url;
}
这是模型和方法的简化表示,但我相信我保留了所有相关信息。顺便说一句,media
是一个 JSON 对象,其中包含Images
.
现在我也在尝试将数据存储在本地。为了使用 ORMLite 在用户和图像之间建立关系,您似乎必须使用 ForeignCollection 类和 @ForeignCollectionField 注释。我不相信 Gson 可以直接media
将 User 类中的字段的 Json 解析为 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;
}
带有 ORMLite 的 Image 类如下所示:
@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
在同一个视图中显示。就目前而言,Image
根据数据是本地数据还是远程数据,URL 的 URL 存储在不同类型的对象中。我想做的是,如果Image
存储在一个ForeginCollection
对象中,将该对象转换为一个ArrayList
,然后继续执行我的其余代码,提取Image
URL 并显示它。
我想有两个问题。
这是一个好的计划还是我应该编写两种完全不同的方法来
Image
从数据中提取 URL,而不是将对象从 转换ForeignCollection
为ArrayList
?如果这是一个好计划,我如何将 a 转换为
ForeginCollection
aArrayList
?