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

Это будет длинный пост, но, пожалуйста, прочтите его до конца и помогите. Спасибо!

Продолжая мой предыдущий пост, [Android Studio - файл базы данных загружен в неправильной кодировке: 'UTF-8' мое приложение работало нормально, когда я запускал его как на моем телефоне, так и на эмуляторе, несмотря на ошибку кодирования.

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

Просто подумайте, я использую Браузер БД для SQLite и Android Studio (3.2.1). Мой телефон - Samsung S7 Edge +, а эмулятор, который я использовал, - Pixel 2 XL API 28 (Android 9, API 28).

  1. Первая проблема заключается в том, что я добавил новые данные в свою базу данных, но они не отображаются, когда я запускаю их на своем телефоне. См. Ссылку на добавленные новые данные "database - knowledge.db" database = Knowledge.db. Я также удостоверился, что данные обновляются, щелкнув вкладку «Записать изменения». После этого, чтобы импортировать базу данных в Android Studio, мне нужно создать папку с активами базы данных и сохранить в ней файл Knowledge.db. Я так и сделал. Однако, когда я запускаю свое приложение на своем телефоне, оно не показывает обновленные данные, когда я прокручиваю вниз, см. Прилагаемый настоящий телефон actual phone. Но когда я запускаю его на эмуляторе, обновленные данные отображаются в эмулятор телефона

phone emulator. Новые данные озаглавлены «IIDS», «FIDS» и «GMID». Обратите внимание на два снимка экрана телефона, фактические снимки экрана телефона остановились на «Пассажирском терминале», и при дальнейшей прокрутке вниз новые данные не отображаются, но в эмуляторе телефона отображаются новые данные.

Сначала я подумал, что это может быть проблема с размером, поэтому я соответственно уменьшил размеры текста, но проблема не исчезла. Я не могу думать о других возможных причинах.

  1. Во-вторых, я знаю, что обновил базу данных в браузере БД, щелкнув «Записать изменения», потому что, когда я открываю ее снова, новые данные и имена меняются. Но когда я импортирую его в Android Studio, он не обновляется полностью. См. Прилагаемый и обведенный для справки. различия differences

Таким образом, кто-нибудь знает, что может вызвать эту проблему и как я могу ее исправить? Любая помощь приветствуется!

Вы удалили данные приложения на телефоне? Если нет, попробуйте сделать это и повторно запустить приложение.

MikeT 26.10.2018 06:21

@MikeT Привет, я сделал это, и теперь у меня есть ошибка: «Причина: java.lang.NullPointerException: попытка вызвать виртуальный метод int android.database.sqlite.SQLiteDatabase.getVersion ()» для ссылки на нулевой объект » . Может ли это быть из-за DB_VER = 1, о котором я объявил ранее?

user10504780 26.10.2018 06:25

Если вы изменили какую-либо структуру таблицы, вам необходимо увеличить версию базы данных

Al-Amin 26.10.2018 06:40

Либо вам нужно удалить предыдущее установленное приложение и переустановить.

Al-Amin 26.10.2018 06:49

Похоже, это связано с версией. Попробуйте проверить версию в браузере БД с помощью PRAGMA user_version и, возможно, установить ее, например. с использованием PRAGMA user_version=1 (где 1 будет значением DB_VER в приложении). Возможно, DB_VER ниже, чем в БД (хотя сбой должен указывать на отсутствие метода onDowngrade) (переопределение onDownGrade, чтобы ничего не делать, могло быть обходным путем). Возможно, дело просто в изменении DB_VER, если значение в базе данных больше, чем значение в приложении. Удаление и повторная установка приложения может сработать.

MikeT 26.10.2018 06:56

@MikeT Привет! Я проверил Pragma user_version в DB, ​​и изначально он был 0! Затем я обновил его до 1 и аналогичным образом изменил DB_VERSION в своих кодах на 1! Теперь обновленная база данных отображается на обоих телефонах! Спасибо большое за вашу помощь! :)

user10504780 26.10.2018 07:57

@ Аль-Амин Эй! Отмечено большим спасибо! Хотя я наконец понимаю, что все изменения, внесенные в базу данных, должны увеличивать версию, но я не понимаю, применимо ли это к прагме user_version (в браузере БД) или это DB_VERSION = 1 Android Studio? Потому что, когда я изменил DB_VERSION = 2, возникла ошибка, в которой говорилось, что я не могу обновить базу данных, доступную только для чтения, с 1 до 2. Как таковой в будущем, где мне делать изменения версии?

user10504780 26.10.2018 08:00
0
7
419
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Первоначальная проблема была связана с тем, что база данных уже существовала, и, таким образом, копия из папки ресурсов была / не была сделана.

Удаление базы данных (удаление данных приложения или удаление приложения) приведет к тому, что база данных будет скопирована из папки ресурсов.

Однако затем вы столкнулись с проблемой с номером версии. Я считаю, что это произошло потому, что приложение было изменено на использование базы данных версии 2 (фактически, с точки зрения SQLite, user_version). Таким образом, поскольку версия не равна 1 (я подозреваю, что если это 1, проверка версии не выполняется, поэтому почему даже не имеет версии (как в комментариях)), тогда была предпринята попытка проверить версию БД, в результате исключение нулевого указателя, поскольку не было установлено user_version (возможно, ошибка).

По сути, вы не хотите изменять версию БД с 1, если вы (при разработке приложения) повторно вводите измененную базу данных, скопированную из папки ресурсов. В качестве альтернативы вам необходимо установить соответствующую версию с помощью PRAGMA user_version=? (где? - номер версии) в базе данных, используя любой инструмент, который вы используете, перед копированием базы данных в папку с ресурсами.

Единственная причина, по которой вы должны увеличить версию базы данных (с точки зрения Android), - это когда вы хотите, чтобы метод onUpgrade запускался.

  • Обратите внимание на предположения, сделанные при повторной проверке номера версии.

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

Принято к сведению! Еще раз, спасибо!!

user10504780 26.10.2018 09:15

Другие вопросы по теме