Intereting Posts
Admob показывает тестовые объявления, но не реальные объявления Разница в iOS OpenGl ES и Android OpenGl Es Что означает android: layout_weight? Как использовать OpenCV для обработки изображения, чтобы текст стал четким и четким? Преобразование битмапа: создание растрового изображения, которое исключает прозрачные стороны из прозрачного растрового изображения Вкладка «Панель управления Android» и «Фокус клавиатуры» Виджеты Android: как добавить Views в RemoteViews во время выполнения База данных SQLite на SD-карте ImageButton в Android с прозрачным фоном Пакеты модулей, не найденные во время компиляции в IntelliJ Android Studio Warning: использование несовместимых плагинов для обработки аннотаций Хранилище ключей Google повреждено Android Html.fromHtml (String) не работает для <font color = '#'> text </ font> Написание тегов NFC с использованием Nexus S Как добавить подпапку в необработанную папку в приложении для Android?

Невозможно понизить базу данных с версии 2 до 1 даже после новой установки и повторного запуска

Я пишу приложение для Android с использованием SQLite DB.

У меня было несколько экспериментов и я изменил версию БД с 1 на 2.

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

Я решил снова изменить версию на 1.

Я сделал новую установку, и все сработало нормально.

Но затем запуск во второй раз вызывает эту ошибку:

06-05 10:03:35.683: E/AndroidRuntime(9010): android.database.sqlite.SQLiteException: Can't downgrade database from version 2 to 1 06-05 10:03:35.683: E/AndroidRuntime(9010): at android.database.sqlite.SQLiteOpenHelper.onDowngrade(SQLiteOpenHelper.java:361) 

Почему это, в конце концов, я сделал новую установку, и БД также нужно было удалить. Нет?

Как я могу изменить версию на 1 снова?

Solutions Collecting From Web of "Невозможно понизить базу данных с версии 2 до 1 даже после новой установки и повторного запуска"

Это исключение выбрасывается на следующих условиях:

  • На устройстве, на котором запущен код, есть файл базы данных версии 2.
  • Код запрашивает версию 1 базы данных (с параметром для конструктора SQLiteOpenHelper )
  • onDowngrade() не переопределяется в вашем коде.

Вы говорите, что код работал нормально в первый раз после новой установки. Убедитесь, что нет другого кода, который бы снова увеличил номер версии того же файла базы данных до 2.

Это исключение возникает, когда необходимо понизить базу данных, но ваш класс, основанный на SQLiteOpenHelper, не реализует обратный вызов onDowngrade .

Вы не показываете, где создана база данных, где обычно назначается версия базы данных (например, SQLiteOpenHelper ctor).

Есть ли вероятность, что у вас есть база данных на внешней файловой системе? Если вы не соблюдаете соглашения об именах, эти файлы не удаляются при удалении приложения.

Как вы выполнили новую установку?

  • adb install -r ? В этом случае данные вашего приложения, включая базу данных (ов), не будут затронуты.
  • adb uninstall и adb install ? Это был бы правильный способ выполнить чистую установку. Все данные будут удалены во время uninstall и ваша база данных будет создана только после первого запуска после install .

Но вы пишете, что во время первого запуска после новой установки он работал. Это может означать только то, что вы все еще выполняете обновление до версии 2.

Обновление : перейдите к информации о приложении и> Хранение и четкие данные также должны работать.

Одна из возможных причин, по которой он работал первый раз, но не второй раз, может заключаться в том, что база данных не была вызвана в первом запуске?

Также из Marshmallow данные приложения Android автоматически резервируются. Для приложений с таргетингом 23+, чтобы ваше приложение могло получить предыдущую базу данных из облака без вашего ведома.

К сожалению, вы еще не можете удалить данные приложения отдельно. Но если вы не возражаете убить свои резервные данные для всех приложений, вы можете удалить приложение, а затем перейти на https://myaccount.google.com/dashboard и развернуть раздел Android и удалить резервные копии данных приложения.

После этого вы сможете переустановить приложение и получить новую новую базу данных.

Это сработало для меня, но делайте это на свой страх и риск.

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

Это стандартная реализация onDowngrage() :

 public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { throw new SQLiteException("Can't downgrade database from version " + oldVersion + " to " + newVersion); } 

Если вам нужно переопределить этот метод, прочитайте также этот вопрос .

Без переопределения этого метода мы не можем уменьшить версию SQLite после увеличения и выполнения. Поэтому вам нужно вернуться на 2 или больше 2 :

 public DatabaseHelper(Context context) { super(context, DB_NAME, null, 2); } 

Если вы пытаетесь обновить свою таблицу, возможно, нужно пройти 3 не 2 и каждый раз, когда вам нужно обновлять таблицу, вам нужно увеличить версию (не уменьшать) .