Intereting Posts
Заставить Android DateUtils.getRelativeDateTimeString () игнорировать языковой стандарт устройства? Как заставить панель поиска Search Search заполнить всю панель действий? Слева выровняйте текст внутри кнопки в Android Как использовать textview.getLayout ()? Он возвращает null FragmentManager IllegalStateException: нет хоста Android: GLES20: вызывается нереализованным API OpenGL ES Как сделать виджет запуска приложения в android? В чем разница между двумя вариантами использования учетных данных «VPN и приложения» и «Wi-Fi» при установке специального сертификата на эмулятор Android? Как перечислить все файлы и папки, находящиеся на SD-карте Консоль отладки не отображает сообщения после обновления Android Studio до версии 2.3 GridView с динамическим числом столбцов в каждой строке Android с низким уровнем чтения SD-карты более 2 ГБ Ошибка: java.lang.UnsatisfiedLinkError с roboelectric и realm Как сохранить изображение в базе данных SQLite Как добавить подсказку строки в имени приложения Android

SQLiteOpenHelper не может вызвать onCreate?

Я пытаюсь создать локальную базу данных на телефоне android, используя sqlite .

У меня есть вспомогательный класс, показанный ниже, который используется для создания базы данных и предоставления «помощи».

Я хочу создать объект этого класса в основной части моего кода и создать там базу данных и таблицы.

Проблема:

Всякий раз, когда я создаю объект класса, он, похоже, не вызывает метод onCreate в помощнике. Я думал, это должно произойти. Я думал, что onCreate был в основном конструктором для класса. (Я считаю, что я неправ)

  • Итак, почему он не вызывает метод onCreate ?
  • Или как мне получить его для создания базы данных и таблиц, где я создаю объект класса?
  • Что было бы лучшим способом сделать это, если это не хороший подход?

 public class SmartDBHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "smart_lite_db.db"; private static final int DATABASE_VERSION = 2; private static final String NOTIFY_TABLE_NAME = "user_notify_data"; private static final String HR_TABLE_NAME = "user_hr_data"; private static final String NOTIFY_TABLE_CREATE = "CREATE TABLE " + NOTIFY_TABLE_NAME + " (counter INTEGER PRIMARY KEY, " + "userresponse INTEGER, " + "notifytime INTEGER);"; private static final String DATA_TABLE_CREATE = "CREATE TABLE " + HR_TABLE_NAME + " (counter INTEGER PRIMARY KEY, " + "hr INTEGER, " + "act INTEGER, " + "timestamp INTEGER);"; public SmartDBHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); // TODO Auto-generated constructor stub } @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub Log.v("smartdbhelper", "before creation"); db.execSQL(NOTIFY_TABLE_CREATE); Log.v("smartdbhelper", "middle creation"); db.execSQL(DATA_TABLE_CREATE); Log.v("smartdbhelper", "after creation"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub } } 

 public class SmartApp extends Activity implements OnSharedPreferenceChangeListener { private SmartDBHelper dBHelper; public void onCreate(Bundle savedInstanceState) { //where i am wanting to create the database and tables dBHelper = new SmartDBHelper(getContext()); } } 

Solutions Collecting From Web of "SQLiteOpenHelper не может вызвать onCreate?"

Функция onCreate не является конструктором для класса базы данных. Он вызывается только при попытке открыть базу данных, которая не существует. Чтобы открыть / создать базу данных, вам необходимо добавить вызов к одному из этих методов:

 public class SmartApp extends Activity implements OnSharedPreferenceChangeListener { private SmartDBHelper dBHelper; public void onCreate(Bundle savedInstanceState) { //where i am wanting to create the database and tables dBHelper = new SmartDBHelper(getContext()); // open to read and write dBHelper.getWritableDatabase(); // or to read only // dBHelper.getReadableDatabase(); } } 

Он немного большой, но вот мой DatabaseAdapter, который вы можете посмотреть на: http://saintfeintcity.org/projects/sfc/repository/entry/trunk/src/org/saintfeintcity/database/GameDbAdapter.java

Вы должны вызвать getWritableDatabase() или getReadableDatabase() .