Intereting Posts
Проверьте, добавлен ли элемент вида в макет или нет программно Android 4.0 – API-уровень 14 против API Google (Google Inc.) – API-уровень 14: В чем разница? Может ли веб-сайт (HTML5, JavaScript) обращаться к списку контактов мобильного устройства (андроид / iPhone), файлам SDCard Изменение контактной информации Как исправить метод getActionBar может вызвать java.lang.NullPointerException Есть ли способ заменить или отключить звук затвора камеры в Android? Режим фокусировки камеры Android Как отключить пейджинг, проверив пальцем в ViewPager, но все же сможете прокручивать программно? Конфигурация сети эмулятора Android Android – отправлено плохое уведомление – не удалось расширить RemoteViews для: StatusBarNotification Cordova / Phonegap / Ionic App – местный магазин удаленных изображений Использование курсора в android IntelliJ IDEA – Android JDK не работает Что случилось с моим включением в RelativeLayout? Как приостановить android.speech.tts.TextToSpeech?

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() .