【发布时间】:2015-04-11 04:09:42
【问题描述】:
因为 @CommonsWare 建议(在 cmets 到 this answer)使用 Android SQLiteAssetHelper 库,我决定不使用 Using your own SQLite database in Android applications 方法(一个流行的 SO 答案)从我的资产文件夹中复制我的预填充数据库到应用数据库文件夹。
按照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 问题和答案不是同一个问题:
【问题讨论】: