2017-02-15 74 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 {