wul*_*ong 29 android arraylist gson ormlite foreign-collection
如果我对我的解释不是很清楚,我会道歉但是如果要求,我会添加并编辑这个问题.
我正在开发一个Android应用程序,它通过外部API接收数据,并使用ORMLite在本地存储数据.在本地存储数据并使用ORMLite之前,我有一些模型从服务器检索JSON并通过以下方式对其进行解析:
Gson gson = new Gson();
String result = ApiClient.httpPost("/user_route");
User user = gson.fromJson(result, User.class);
Run Code Online (Sandbox Code Playgroud)
User类已定义
public class User {
int id;
String name;
ArrayList<Image> media;
}
Run Code Online (Sandbox Code Playgroud)
而Image类:
public class Image {
int id;
int creator_id;
String url;
}
Run Code Online (Sandbox Code Playgroud)
这是模型和方法的简化表示,但我相信我保留了所有相关信息.BTW,media是一个包含的JSON对象Images.
现在我还试图在本地存储数据.为了使用ORMLite在Users和Images之间建立关系,你似乎必须使用ForeignCollection类和@ForeignCollectionField注释.我不相信Gson可以直接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;
}
Run Code Online (Sandbox Code Playgroud)
带有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;
}
Run Code Online (Sandbox Code Playgroud)
应用程序的流程如何工作首先我为用户点击了本地数据库.我执行一些逻辑,然后确定是否需要实际命中服务器以"更新"或"刷新"用户数据.
无论数据来自本地还是来自远程服务器,我都需要Image在同一视图中显示.现在,Image根据数据是本地数据还是远程数据,它的URL 存储在不同类型的对象中.我想要做的是,如果Image存储在一个ForeginCollection对象中,将该对象转换为一个ArrayList,然后继续我的其余代码,提取ImageURL并显示它.
我想有两个问题.
这是一个很好的计划还是应该编写两种完全独立的方法Image从数据中提取URL,而不是将对象转换ForeignCollection为ArrayList?
如果这是一个好计划,我该如何转换ForeginCollection为ArrayList?
Gra*_*ray 21
这是一个很好的计划,还是应该编写两种完全独立的方法从数据中提取图像URL,而不是将对象从ForeignCollection转换为ArrayList?
它应该工作.我没有看到一个简单的方法来做到这一点.
一些要点:
ForeignCollection瞬态标记为瞬态,因此在通过JSON传输时会被忽略?然后,您可以User为JSON和ORMLite 使用相同的对象.hydrate()方法会很好,所以它会从media- > 转换,mediaCollection反之亦然.Dao.getEmptyForeignCollect(...)方法.收集完成后,您可以将图像添加到其中,然后将它们添加到表格中.如果这是一个好的计划,我如何将ForeignCollection转换为ArrayList?
这更容易.A ForeignCollection是一个Collection.你可以做一个:
media = new ArrayList<Image>(mediaCollection);
Run Code Online (Sandbox Code Playgroud)
因此,您的User.getMedia()方法应检查null,如果是,请从mediaCollection字段转换.
| 归档时间: |
|
| 查看次数: |
12262 次 |
| 最近记录: |