2017-02-15 1 views
0

Я извлекаю данные из Json, десериализуя Gson и сохраняя в базе данных ORMLite. После запроса постороннего предмета, то результат равен 0.Android ormlite foregin object не сохраняется

Я выборка данных через 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 
} 

Как вы можете видеть, у меня нет ссылки на объект 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; 

Coordinate класс (новый):

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