getReadableDatabase()中的SQLiteAssetHelper NullPointerException

时间:2015-04-11 04:09:43

标签: android sqlite assets

由于@CommonsWare建议(在this answer的评论中)使用Android SQLiteAssetHelper库,我决定不使用Using your own SQLite database in Android applications方法(一个流行的SO答案)来复制我的从我的资产文件夹到app数据库文件夹的预填充数据库。

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。有什么问题?

这些问题和答案不是同一个问题:

1 个答案:

答案 0 :(得分:0)

我设置问题以使答案显而易见,但现在是:

与Android SQLiteAssetHelper方向相似(在撰写本文时,无论如何。希望将来会清除它们),DATABASE_NAME值不应包括.zip延期。将您的代码更改为

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

但保持src/main/assets/databases/test.db.zip不变,一切都应该有效。