【问题标题】:SQLiteAssetHelper NullPointerException at getReadableDatabase()SQLiteAssetHelper NullPointerException 在 getReadableDatabase()
【发布时间】: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 问题和答案不是同一个问题:

【问题讨论】:

    标签: android sqlite assets


    【解决方案1】:

    我设置这个问题是为了让答案有些明显,但这里是:

    与 Android SQLiteAssetHelper 的说明相反(无论如何,在撰写本文时。希望他们将来会澄清它们),DATABASE_NAME 值不应包含 .zip 扩展。将代码更改为

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

    但保持 src/main/assets/databases/test.db.zip 不变,一切都会正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-17
      • 2014-01-08
      • 2011-09-29
      • 2012-10-28
      • 1970-01-01
      • 1970-01-01
      • 2012-09-28
      • 1970-01-01
      相关资源
      最近更新 更多