我在使用带有多个表/类的 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)。这是我用于此的代码。
胺1:
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);
}
管理员2:
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);”行之前 发生错误......我不知道为什么会有“?” 在价值。对象前的一行看起来不错。
有人有想法吗?
非常感谢!
更新
不幸的是,我无法解决问题。
onPause()
我现在尝试在活动的和/或活动中关闭 OrmLiteSqliteOpenHelper onStop()
:
myHelper.close();
从那以后我得到错误:
“无法销毁活动 - 空指针异常”
我无法理解这个错误。
有人有想法吗?