Я использую ORMLite для сохранения моего объекта в моем SqliteDatabase
в моем приложении.OrmLite java.lang.IllegalStateException: вы должны вызвать initialize(), прежде чем вы сможете использовать dao
Я получаю это исключение, пытаясь получить DAO, чтобы сохранить объект.
В документации сказано, что я должен вызвать метод initialize()
, прежде чем я могу использовать DAO, и документация OrmLite (недостаточная) говорит:
BaseDaoImpl (класс)
Initialize(): Инициализация различные конфигурации DAO после того, как были вызваны различные сеттеры.
Проблема заключается в том, я получаю объекты DAO по телефону getDao(class)
, и нет initialize()
, что я могу назвать ни на DAO, ни в моем классе, который простирается OrmLiteSqliteOpenHelper
.
Это мой пользовательский код OpenHelper
класса:
public class LocalDBHelper extends OrmLiteSqliteOpenHelper {
private LocalDBHelper(Context context){
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public static LocalDBHelper getInstance(Context context) {
if (instance == null) instance = new LocalDBHelper(context);
return instance;
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) {
try {
TableUtils.createTable(connectionSource, Barrio.class);
TableUtils.createTable(connectionSource, Fenomeno.class);
TableUtils.createTable(connectionSource, Info.class);
TableUtils.createTable(connectionSource, TelefonoUtil.class);
TableUtils.createTable(connectionSource, Alarma.class);
TableUtils.createTable(connectionSource, ReplicaAlerta.class);
} catch (SQLException e) {
e.printStackTrace();
Log.d(TAG, e.getMessage());
}
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int oldVersion, int newVersion) {
try {
TableUtils.dropTable(connectionSource, Barrio.class, true);
TableUtils.dropTable(connectionSource, Fenomeno.class, true);
TableUtils.dropTable(connectionSource, Info.class, true);
TableUtils.dropTable(connectionSource, TelefonoUtil.class, true);
TableUtils.dropTable(connectionSource, Alarma.class, true);
TableUtils.dropTable(connectionSource, ReplicaAlerta.class, true);
} catch (SQLException e) {
e.printStackTrace();
Log.d(TAG, e.getMessage());
}
}
И это полный стек Android Monitor:
java.lang.IllegalStateException: you must call initialize() before you can use the dao
at com.j256.ormlite.dao.BaseDaoImpl.checkForInitialized(BaseDaoImpl.java:1061)
at com.j256.ormlite.dao.BaseDaoImpl.create(BaseDaoImpl.java:316)
at com.org.siam.app.controller.BarrioController.actualizarTodos(BarrioController.java:75)
at com.org.siam.app.remote.BarriosWebService.onResponse(BarriosWebService.java:43)
at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:68)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
EDIT: добавлен Application
подкласса под названием SiacApplication
, onCreate()
метод здесь кода (также зарегистрировано на манифесте):
@Override
public void onCreate() {
super.onCreate();
LocalDBHelper.getInstance(this);
}
EDIT 2: добавлена ДАО газопоглотитель (дао локальное поле):
public Dao<Barrio, Long> getBarrioDao() throws SQLException {
if (barrioDao == null) barrioDao = getDao(Barrio.class);
return barrioDao;
}
Я думаю, что ваш ApplicationContext всегда пустой, поэтому он считает, что это не initalized. –
Я изменил свои изменения. Все еще получаю такое же исключение. – sbd2
Что-то не так с вашим экземпляром DAO. Вы уверены, что получили это от помощника? Можете ли вы показать фактический код, который создает dao? – Gray