J'ai un problème en utilisant le framework ORMlite avec plusieurs tables/classes.Android ORMlite - plusieurs tables/classes
obtenu un DatabaseHelper.class Ive qui prolonge la Wich OrmLiteSqliteOpenHelper ressemble à ceci (pièces importantes):
public class DatabaseHelper<T> extends OrmLiteSqliteOpenHelper {
private static final String DATABASE_NAME = "database.db";
private static final int DATABASE_VERSION = 6;
private Dao<T, Integer> myDao = null;
private Class<T> type;
public DatabaseHelper(Context context, Class<T> type) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.type = type;
}
@Override
public void onCreate(SQLiteDatabase db, ConnectionSource connectionSource) {
try {
TableUtils.createTable(connectionSource, type);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public Dao<T, Integer> getmyDataDao() throws SQLException {
if (myDao == null) {
myDao = getDao(type);
}
return myDao;
}
}
J'utilise 2 classes (Admin1, Admin2) où je veux sauver 2 objets différents (Object1, Object2) dans la base de données. Voici le code que j'ai utilisé pour cela.
Amin1:
static {
OpenHelperManager.setOpenHelperFactory(new SqliteOpenHelperFactory() {
public OrmLiteSqliteOpenHelper getHelper(Context context) {
return new DatabaseHelper<Object1>(context, Object1.class);
}
});
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.object1);
Dao<Object1, Integer> myDaoObject1 = getHelper().getmyDataDao();
Object1 o1 = new Object1("Name of Object 1");
int ret = myDaoObject1.create(o1);
}
Admin2:
static {
OpenHelperManager.setOpenHelperFactory(new SqliteOpenHelperFactory() {
public OrmLiteSqliteOpenHelper getHelper(Context context) {
return new DatabaseHelper<Object2>(context, Object2.class);
}
});
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.object2);
Dao<Object2, Integer> myDaoObject2 = getHelper().getmyDataDao();
Object2 o2 = new Object2("Name of Object 2");
int ret = myDaoObject2.create(o2);
}
Il fonctionne très bien pour le premier objet i sauver (en Admin1 ou Admin2). Mais si je sauvegarde object1 dans Admin1 et après que je veux enregistrer object2 dans Admin2 ou inverse (l'ordre n'est pas décisif), j'obtiens erreur suivante dans la ligne "int ret = myDaoObject2.create (o2);":
Unable to run stmt on object [email protected]: INSERT INTO `object2` (`name`) VALUES (?)
Il n'y a pas d'erreur lors de la création de Object2 o2 dans le code. Pas plus que la ligne "int ret = myDaoObject2.create (o2);" l'erreur se produit ... Je ne sais pas pourquoi il y a un "?" dans la valeur. Une ligne avant l'objet semble bien.
Quelqu'un a-t-il une idée?
Merci beaucoup!
Mise à jour
Malheureusement, je ne pouvais pas résoudre le problème.
essayé maintenant Ive fermer la OrmLiteSqliteOpenHelper au onPause()
et/ou au onStop()
du activitiy:
myHelper.close();
Depuis que je reçois l'erreur "Unable to destroy activity - null pointer exception"
.
Je ne peux pas comprendre cette erreur :-(
Est-ce que quelqu'un a une idée?
S'il vous plaît simplement modifier votre question de fournir des informations supplémentaires ou utiliser les installations de commentaires dans les réponses individuelles à demander des éclaircissements. –