2017-02-15 72 views
0

我正在从Json检索数据,使用Gson进行反序列化并使用ORMLite保存到数据库中。查询异物后,结果为0。Android ormlite foregin对象没有保存

我通过获取API(网络)的数据:与Gson构建对象

[{ 
    "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 
    } 
}] 

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(); 

正如预期的那样,我越来越从数据库中的结果。但是,位置的坐标是空的。这是因为我还没有Coordinate对象上调用dao.refresh()

的车型:

@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 
} 

正如你所看到的,我没有从协调到Location对象的引用。

如果我查询坐标表(用于调试目的),我得到0的结果。

Dao<Coordinate, Long> dao = dbHelper.getDaoCoordinate(); 
QueryBuilder<Coordinate, Long> qb = dao.queryBuilder(); 
List<Coordinate> coordinates = qb.query(); 

上述查询给我0的结果。我做错了什么?

回答

0

的问题是由类的名称和异物的名称引起的。

我已经改变了异物的名称相匹配的表的名称:

位置类(同)

@DatabaseField(foreign = true) 
private Coordinate coords; 

坐标类(新)

@DatabaseTable(tableName = "coords") 
public class Coordinate {