Поскольку @CommonsWare предложил (в комментариях к this answer), используя Android SQLiteAssetHelper библиотеку, я решил не использовать Using your own SQLite database in Android applications метод (популярный SO ответа), чтобы скопировать мои предварительно заполненные базы данных из папки моих активов в папка базы данных приложения.SQLiteAssetHelper NullPointerException в getReadableDatabase()
После Android SQLiteAssetHelper directions, я создал свой проект, как это:
Поскольку я использую Gradle, моя база данных была в src/main/assets/databases/test.db.zip
.
Я использовал расширение .zip
, так как направления сказал
Более ранние версии этой библиотеки требуется базы данных актива сжатую в ZIP-архиве. Это больше не является обязательным требованием, но по-прежнему поддерживается. Приложения, все еще нацеленные на Gingerbread (API 10) или ниже, должны продолжать предоставлять сжатый архив, чтобы обеспечить отсутствие больших файлов базы данных во время процесса упаковки.
и я хочу поддерживать более ранние версии Android.
Мой класс базы данных похожа на следующее:
public class MyDatabase extends SQLiteAssetHelper {
private static final String DATABASE_NAME = "test.db.zip";
private static final int DATABASE_VERSION = 1;
public MyDatabase(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
}
Опять же, я использовал расширение .zip
для значения DATABASE_NAME
, так как направления сказал
... вы должны предоставить ... база данных SQLite в папке с базами данных , имя файла которой соответствует имени базы данных, которое вы указываете в коде (включая расширение файла, если оно есть)
Однако, когда я делаю SQLiteDatabase db = getReadableDatabase();
Я получаю исключение NullPointerException. В чем проблема?
Эти SO вопросы и ответы не тот же вопрос:
- NullPointerException with Android SQLiteAssetHelper
- SQLiteAssetHelper:Couldn't open database for writing (will try read-only)
- SQLiteAssetHelper NullPointerException only on some devices