複数のテーブル/クラスでORMliteフレームワークを使用すると問題が発生します。
次のようなOrmLiteSqliteOpenHelperを拡張するDatabaseHelper.classが1つあります(重要な部分)。
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つの異なるオブジェクト(Object1、Object2)をデータベースに保存する2つのクラス(Admin1、Admin2)を使用しています。ここに私がこれに使用したコードがあります。
アミン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);
}
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 (?)
コードでObject2o2を作成する際にエラーは発生しません。「intret=myDaoObject2.create(o2);」という行の前ではありません。エラーが発生します...なぜ「?」があるのかわかりません。値で。オブジェクトの1行前が正常に見えます。
誰かアイデアはありますか?
どうもありがとう!
アップデート
残念ながら、私は問題を解決できませんでした。
onPause()
私は今、アクティビティのおよび/またはでOrmLiteSqliteOpenHelperを閉じようとしましたonStop()
:
myHelper.close();
それ以来、エラーが発生します。
「アクティビティを破棄できません-nullポインタ例外」
このエラーが理解できません。
誰かアイデアがありますか?