У меня проблема с использованием инфраструктуры ORMlite с более чем одной таблицей / классами.
У меня есть один DatabaseHelper.class, который расширяет OrmLiteSqliteOpenHelper, который выглядит следующим образом (важные части):
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;
}
}
Я использую 2 класса (Admin1, Admin2), в которых я хочу сохранить 2 разных объекта (Object1, Object2) в базе данных.Вот код, который я использовал для этого.
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);
}
Он отлично работает для первого объекта, который я сохраняю (в Admin1 или Admin2).Но если я сохраняю object1 в Admin1 и после этого хочу сохранить object2 в Admin2 или наоборот (порядок не является решающим), я получаю следующую ошибку в строке "int ret = myDaoObject2.create (o2);":
Unable to run stmt on object com.example.Object2@44c408f0: INSERT INTO `object2` (`name` ) VALUES (?)
При создании Object2 o2 в коде нет ошибок.Не смотрите на строку "int ret = myDaoObject2.create (o2);"ошибка возникает ... я понятия не имею, почему есть "?"в стоимости.Одна строка показывает, что объект выглядит отлично.
У кого-нибудь есть идеи?
Большое спасибо!
Обновление
К сожалению, яне удалось решить проблему.
Я пытался закрыть OrmLiteSqliteOpenHelper в onPause()
и / или в onStop()
активности:
myHelper.close();
С тех поря получаю ошибку "Unable to destroy activity - null pointer exception"
.
Я не могу понять эту ошибку: - (
У кого-нибудь есть идея?