我从Json
检索数据,使用Gson
反序列化并使用ORMLite
保存到数据库中。查询外来对象后,结果为0。
我通过API(网络)获取数据:
[{
"id": 4,
"name": "California",
"desc": "",
"coords": {
"lat": 37.755363,
"lon": -122.478676
}
}, {
"id": 12,
"name": "Texas",
"desc": "asd",
"coords": {
"lat": 29.739861,
"lon": -95.395660
}
}]
使用Gson
构建对象:
List<Location> locations = new Gson().fromJson(szData, Location.class);
我已经使用Android Studio调试检查过,对象已成功创建。
将位置保存到数据库中:
Dao<Location, Long> dao = dbHelper.getDaoLocation();
long entries = dao.create(locations);
对象已成功保存到数据库中。
通过ORMLite
获取数据库中的位置:
List<Location> locations = daoLocation.queryBuilder().query();
正如预期的那样,我从数据库中获取结果。但是,位置坐标为空。这是因为我没有在dao.refresh()
对象上调用Coordinate
。
模特:
@DatabaseTable(tableName = "Locations")
public class Location {
@DatabaseField(columnName = "id", generatedId = true)
private transient long id;
@DatabaseField(columnName = "server_id")
@SerializedName("id")
private long serverId;
private String name;
private String desc;
@DatabaseField(foreign = true)
private Coordinate coords;
// Getters and setters
}
@DatabaseTable(tableName = "Coordinates")
public class Coordinate {
@DatabaseField(generatedId = true)
private long id;
@SerializedName("lat")
private double latitude;
@SerializedName("lon")
private double longitude;
// Getters and setters
}
如您所见,我没有从坐标中引用位置对象。
如果我查询坐标表(用于调试目的),我得到0结果。
Dao<Coordinate, Long> dao = dbHelper.getDaoCoordinate();
QueryBuilder<Coordinate, Long> qb = dao.queryBuilder();
List<Coordinate> coordinates = qb.query();
以上查询给出了0结果。我做错了什么?
答案 0 :(得分:0)
问题是由类的名称和外来对象的名称引起的。
我更改了外来对象的名称以匹配表名:
地点类(相同):
@DatabaseField(foreign = true)
private Coordinate coords;
协调班级(新):
@DatabaseTable(tableName = "coords")
public class Coordinate {