2015-04-11 2 views
0

Поскольку @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 вопросы и ответы не тот же вопрос:

ответ

0

Я создал вопрос, чтобы сделать ответ несколько очевидным, но здесь это:

В отличие от то, что называет Android SQLiteAssetHelper направления, похожее на это во время написания этой статьи. надеюсь, что они будут ясны в будущем), значение DATABASE_NAME не должно включать расширение .zip. Изменение кода

private static final String DATABASE_NAME = "test.db"; // no .zip extension 

но держать src/main/assets/databases/test.db.zip как она есть, и все должно работать.

Смежные вопросы