Я использую ORMLite в проекте Android, и я не хочу использовать расширенные действия, потому что я вставляю значения в базу данных на AsyncTask.
Вы на правильном пути, но немного не в себе @Matt. Честно говоря, я никогда не делал проект без расширения наших базовых классов. Но это хорошее упражнение, поэтому я создал этот пример проекта ORMLite , который использует Activity
и управляет собственным помощником.
Ваш класс DBHelper
в порядке, но на самом деле вам не нужен класс DataAccess
. В каждом из ваших действий (или услуг ...) вам нужно иметь что-то вроде следующего:
private DBHelper dbHelper = null;
@Override
protected void onDestroy() {
super.onDestroy();
if (dbHelper != null) {
OpenHelperManager.releaseHelper();
dbHelper = null;
}
}
private DBHelper getHelper() {
if (dbHelper == null) {
dbHelper = (DBHelper)OpenHelperManager.getHelper(this, DBHelper.class);
}
return dbHelper;
}
Вы [очевидно], затем используйте это в своем коде, выполнив что-то вроде:
Dao<SomeObject, Integer> someObjectDao = getHelper().getSomeObjectDao();
Поэтому, когда вы звоните getHelper()
в первый раз, он получает помощника через менеджера, устанавливающего соединение с базой данных. Всякий раз, когда ваше приложение уничтожается ОС, оно освобождает помощника - возможно, закрывая соединение с основной базой данных, если это последний выпуск.
Обратите внимание, что OpenHelperManager.getHelper()
требует Context
в качестве первого аргумента, если вы делаете это даже без базового класса Activity
.
Edit:
Если вы хотите создать класс типа DataAccess
, чтобы централизовать обработку вспомогательного класса, вам нужно будет сделать методы статичными и создать собственный счетчик использования. Если есть несколько действий и фоновых задач, вызывающих getHelper()
, тогда возникает вопрос, когда вы звоните releaseHelper()
? Вам придется увеличивать счетчик для каждого запроса get и только для вызова, когда счетчик вернется к 0. Но даже в этом случае я не уверен на 100%, сколько строк вы сэкономите из своего класса активности.