Android P (9, Pie) Пустая база данных SQLite, созданная перед копированием из папки активов - PullRequest
0 голосов
/ 25 сентября 2018

Пустой файл базы данных с тем же именем существует ДО того, как мы скопируем его из папки ресурсов.

android.database.sqlite.SQLiteException: нет такой таблицы:

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

Как создается файл нашей базы данных?

Почему он существуетдаже если мы не вызывали и не создавали экземпляры наших помощников по базам данных?

Использование одинаковых классов SQLiteHelper для всех предыдущих версий без проблем.Запуск на Android 9 Pie вызывает это сообщение об ошибке после чистой установки нашего приложения для Android, которое использует существующую базу данных в каталоге ресурсов.Обычно, когда этот файл НЕ существует в каталоге данных, он копируется, а затем открывается.

Проверен и перепроверен, файл существует ДО нашего вызова, чтобы переместить его из нашего каталога ресурсов.

При проверке каталога данных Android 9 Pie наш файл базы данных SQLite уже существует.Это после новой установки И очистки кеша и данных

Чтобы повторить то, что мы видим.

  1. Настройки ... Приложения и уведомления
  2. Выберите наше приложение
  3. Хранилище
  4. Очистить кэш + Очистить хранилище
  5. Удалить приложение.

    Активность запуска "SplashActivity" onCreate ()

    String mName = "myawesomedatabase.db";
    String mDatabasePath = this.getApplicationInfo().dataDir + "/databases";
    
    
    File file = new File (mDatabasePath + "/" + mName);
    Log.i("DATABASE", "##### SplashActivity.getData() " + mDatabasePath + "/" + mName);
    if (file.exists()) {
       Log.i("DATABASE", "##### SplashActivity.getData() FILE EXISTS!!!");
    
    }
    

Повторяя вышеизложенное и НЕ удаляя приложение, копируйте файл правильно.Это ТОЛЬКО на новых установках.

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

С: /data/data/com.___._____/databases/

С: /data/user/0/com.____.____ / database /

Ссылка на эту статью, которая помогла этому открытию. Android P - «SQLite: Нет такой ошибки таблицы» после копирования базы данных из ресурсов

Обход:

  1. Чистая установка приложения.

  2. Ожидание сбоя

  3. Настройки ... Приложения ... Определенное приложение ... Очистить кэш + Очистить хранилище

  4. Запустите приложение снова

  5. Успешно, база данных НЕ существует в каталоге данных, затем приложение скопирует файл из каталога активов без проблем.

1 Ответ

0 голосов
/ 25 сентября 2018

Нет глупых вопросов?Но, черт возьми, я чувствовал себя глупо, когда это был простой ответ.

Возможно, из-за того, что мы спросили здесь, мы стали выглядеть сложнее.

Android P имеет функцию автоматического восстановления из резервной копии.Даже если у вас не установлена ​​копия приложения.Итак, поврежденный файл восстанавливался из резервной копии.

Действия Android P для исправления (по крайней мере, в среде разработки)

  1. Настройки ...

  2. Система

  3. / Advanced

  4. Резервное копирование

  5. Данные приложения

  6. Выключить автоматическое восстановление

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

...