2017-02-15 1 views
0

Je récupère des données d'un Json, désérialisant avec Gson et en enregistrant dans une base de données avec ORMLite. Après avoir interrogé l'objet étranger, le résultat est 0.Android ne peut pas être sauvé objet

Je Récupération des données via l'API (réseau):

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

Construire les objets avec Gson:

List<Location> locations = new Gson().fromJson(szData, Location.class); 

J'ai vérifié Avec le débogage d'Android Studio, les objets ont été créés avec succès.

Enregistrement des emplacements dans la base de données:

Dao<Location, Long> dao = dbHelper.getDaoLocation(); 
long entries = dao.create(locations); 

Les objets ont été enregistrés dans la base de données avec succès.

Obtenir les emplacements de la base de données via ORMLite:

List<Location> locations = daoLocation.queryBuilder().query(); 

Comme prévu, je reçois les résultats de la base de données. Toutefois, la coordonnée de l'emplacement est vide. C'est parce que je n'ai pas appelé dao.refresh() sur l'objet Coordinate.

Les modèles:

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

Comme vous pouvez le voir, je n'ai pas une référence à l'objet Lieu de la Coordination.

Si j'interroge la table de coordonnées (à des fins de débogage), j'obtiens 0 résultat.

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

La requête ci-dessus donne 0 résultats. Qu'est ce que je fais mal?

Répondre

0

Le problème a été causé par les noms des classes et le nom de l'objet étranger.

J'ai changé le nom de l'objet étranger pour correspondre au nom de la table:

Emplacements classe (même):

@DatabaseField(foreign = true) 
private Coordinate coords; 

Coordonner la classe (nouveau):

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