Intereting Posts
Как получить доступ к кодам статуса MediaMetadataRetriever.setDataSource (…)? Как создать нижнее меню, такое как gmail android Каковы принципы создания URI на платформе Android? Применение темы для динамических кнопок радиосвязи в Android Модернизация почты с использованием Firebase Android – получение ошибки «приложение не может выполнить это действие» при попытке отправить электронное письмо? Ssn mask с jquery на android2.3.3 Создание папки во внутренней памяти для сохранения файлов и их последующего поиска Персонаж Android с символьной анимацией SQLiteConstraintException: код ошибки 19: ограничение не выполнено – ошибка Android Как проверить, выпущен ли MediaPlayer ()? Почему мой ProgressDialog прослушивает ЛЮБОЙ КЛЮЧ (прикосновение) вместо откидывания, чтобы отклонить его? Как проверить подключение или отключить сетевое подключение в WIFI и 3G (план данных) на мобильных устройствах? Фоновый стиль не отображается на панели прогресса InfiniteViewPager зависает по методу setCurrentItem ()

Android SQLiteOpenHelper: метод onCreate () не вызывается. Зачем?

Я пытаюсь сделать свое первое приложение для Android. Я слышал, что метод SQLiteOpenHelper.onCreate () для создания таблиц, если база данных не создана. Однако метод onCreate () не работал даже при попытке отладки. Пожалуйста, ознакомьтесь с приведенным ниже кодом и дайте мне какие-либо предложения. Любая помощь будет оценена по достоинству.

================================================================= public class NameToPinyinActivity extends Activity { DatabaseOpenHelper helper = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.nametopinyin); Button searchButton = (Button) findViewById(R.id.search); searchButton.setOnClickListener(new ButtonClickListener()); helper = new DatabaseOpenHelper(NameToPinyinActivity.this); } ================================================================= public class DatabaseOpenHelper extends SQLiteOpenHelper { /** DB Name */ private static final String DB_NAME = "pinyin"; /** CREATE TABLE SQL */ private static final String CREATE_TABLE_SQL = "CREATE TABLE UNICODE_PINYIN" + "(ID INTEGER PRIMARY KEY AUTOINCREMENT, " + "UNICODE TEXT NOT NULL, PINYIN TEXT NOT NULL)"; public DatabaseOpenHelper(Context context) { super(context, DB_NAME, null, 1); } @Override public void onCreate(SQLiteDatabase db) { db.beginTransaction(); try { db.execSQL(CREATE_TABLE_SQL); db.setTransactionSuccessful(); } catch (Exception e) { e.printStackTrace(); } finally { db.endTransaction(); } } ================================================================= 

У меня также были проблемы с SQLiteOpenHelper . Для меня работало сохранение переменной-члена

 SQLiteDatabase db; 

В подклассе SQLiteOpenHelper и вызове

  db = getWritableDatabase(); 

В конструкторе.

Ответ на этот вопрос также включает полезную информацию: SQLiteOpenHelper не может вызвать onCreate?

Надеюсь, это поможет!

Пока вы не назовете метод getWritableDatabase() или getReadableDatabase() класса SQLiteOpenHelper , база данных не будет создана.

Так же просто, как эта база данных будет создана в памяти, когда вам это действительно нужно. 🙂

У меня была аналогичная проблема, когда onCreate не был выполнен. Возможно, это для кого-то полезно, хотя оказалось, что это другая проблема.

Раньше я работал над базой данных и уже давно создал ее. Итак, теперь, после внесения изменений в onCreate (), я надеялся найти созданные новые таблицы. Но SQLiteOpenHelper никогда больше не вызывал onCreate (). Причина была в том, что база данных уже существует. Я все еще работал с тем же устройством, что и раньше, и, следовательно, с уже существующей (старой) базой данных.

Но есть надежда. Когда система видит, что база данных с таким именем уже существует, она также проверяет правильность номера версии. В этом случае я просто забыл, что база данных уже существует. Мое решение просто меняло номер версии. Таким образом, onUpgrade () был вызван предлагаемыми вариантами для изменений onCreate ().

Таким образом, опции были либо удалением полного приложения (и с ним базой данных), либо вызовом onCreate снова после обновления номера версии (и, например, удаления) старой таблицы и вызова функции onCreate ().

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

У меня была аналогичная проблема, но проблема была не в вызове OnCreate .

В приведенном выше примере кода Кевин объяснил, что OnCreate не вызывается, если база данных уже существует. Однако, если, как и я, вы используете несколько таблиц из отдельных действий, то, возможно, вы уже создали базу данных, таблица, связанная с этим видом деятельности, еще не была создана. Следовательно, когда вы пытаетесь установить данные курсора в несуществующей таблице, вы будете вызывать исключение.

Моим решением был определен отдельный класс под названием CreateTable который вызывается как из переопределения OnCreate и из конструктора после

db = getWritableDatabase();

У меня была та же проблема .. разрешение для меня было добавить .db как расширение имени базы данных

Вы можете изменить AUTOINCREMENT на AUTO INCREMENT

Примечание. SQLiteOpenHelper Вызывается onCreate при создании базы данных в первый раз. Если вы создаете таблицу в методе onCreate, вы не можете создать новую SQLiteDatabase . Вы можете увидеть пример

  @Override public void onCreate(SQLiteDatabase db) { String stringCreateTable = "CREATE TABLE "+"tblUser"+" ( " + "id TEXT PRIMARY KEY, " + "name TEXT )"; db.execSQL(stringCreateTable); }