Dans Mon application, j'obtiens des données d'un service Web et les affiche dans la vue recycleur. Après cela, je prévois d'ajouter ces données dans la base de données sqlite locale et afficher ces données lorsque l'utilisateur ouvre une application sans connexion Internet.Manière professionnelle de gérer les classes de modèles lors de l'utilisation de l'application Android GSON et SQLight
est ici une simple classe de modèle que je utilise pour résultat JSON Pars à l'aide GSON
public class Repo implements Parcelable {
@SerializedName("id")
@Expose
private Integer id;
@SerializedName("name")
@Expose
private String name;
@SerializedName("url")
@Expose
private String url;
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeValue(this.id);
dest.writeString(this.name);
dest.writeString(this.url);
}
public Repo() {
}
protected Repo(Parcel in) {
this.id = (Integer) in.readValue(Integer.class.getClassLoader());
this.name = in.readString();
this.url = in.readString();
}
public Integer getId() {
return id;
}
public String getName() {
return name;
}
public String getUrl() {
return url;
}
public void setId(Integer id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setUrl(String url) {
this.url = url;
}
public static final Creator<Repo> CREATOR = new Creator<Repo>() {
@Override
public Repo createFromParcel(Parcel source) {
return new Repo(source);
}
@Override
public Repo[] newArray(int size) {
return new Repo[size];
}
};
}
Je peux créer une classe de modèle presque identique pour représenter des données SQLite. Ici, j'utilise ORMlite. Mais c'est une situation très similaire pour les autres ORM. Mais au moment où j'essaie de sauvegarder ces données dans la base de données SQLite, j'ai déjà des objets de données dans les classes du modèle GSON. C'est une chose redondante copier un objet du modèle GSON et mettre ces valeurs dans le modèle SQLite. J'ai donc trouvé la solution ci-dessous en essayant d'utiliser la classe de modèle unique pour représenter les deux.
@DatabaseTable(tableName = Repo.TABLE_NAME)
public class Repo implements Parcelable {
public static final String TABLE_NAME = "repo";
@DatabaseField(columnName = "repo_id")
@SerializedName("id")
@Expose
private Integer id;
@DatabaseField(columnName = "name")
@SerializedName("name")
@Expose
private String name;
@SerializedName("url")
@Expose
private String url;
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeValue(this.id);
dest.writeString(this.name);
dest.writeString(this.url);
}
public Repo() {
}
protected Repo(Parcel in) {
this.id = (Integer) in.readValue(Integer.class.getClassLoader());
this.name = in.readString();
this.url = in.readString();
}
public Integer getId() {
return id;
}
public String getName() {
return name;
}
public String getUrl() {
return url;
}
public void setId(Integer id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setUrl(String url) {
this.url = url;
}
public static final Creator<Repo> CREATOR = new Creator<Repo>() {
@Override
public Repo createFromParcel(Parcel source) {
return new Repo(source);
}
@Override
public Repo[] newArray(int size) {
return new Repo[size];
}
};
}
J'ai essayer avec différents types de classe modèle où il n'y avait String
champs de type. Comme GSON utilise des types comme Integer
, Boolean
Cela m'empêche d'utiliser le même modèle pour SQLite parce que la base de données n'identifie pas Integer
comme type, pour fonctionner, il doit être int
.
Alors, quelle est la façon professionnelle de gérer cela? Je n'ai pas d'autre choix que de revenir à la méthode de création de deux classes de modèles séparées pour représenter SQLite et GSON.
* Comme GSON utilise des types primitifs comme Integer, Boolean * ' Integer' n'est pas un type primitif, ni 'Boolean' ... define * La base de données n'identifie pas Entier * ... SQLite ne sait rien sur les types Java – Selvin
Merci pour le point. Édité. –