SQLiteOpenHelper 用单例模式实现后 onCreate 方法不执行的解决过程

前文介绍了过个进程访问数据库时数据库被锁的解决方法,就是用单例模式去实现 SQLiteOpenHelper 方法。详见 SQLiteDatabaseLockedException: database is locked 解决方法

然后回过头来运行时,又出现了问题,如题:就是 SQLiteOpenHelper 初始化后,里面的 onCreate 方法不执行,它不执行,数据库就创建不出来。在网上看示例时,没发现有什么地方是不一样的。

好吧,考(zhe)验(mo)人的时候又到了。

新建一个 demo,一步步仔细排查。

……过程不表。

最后确定问题:

因为我是将数据库文件存储在 sd 卡上的,所以是自定义了一个 Context 类(DatabaseContext)Android使用sqlliteOpenhelper更改数据库的存储路径放到SD卡上,在对数据库进行操作时,要把这个自定义的 DatabaseContext 赋值给传递进来的 Context。我恰恰就是犯了这个错误。

看下代码:

    private Context mContext;
    private static SQLiteDatabase mSQLiteDatabase;

    public PersonDB(Context pContext) {
        this.mContext = new DatabaseContext(pContext);
        this.mSQLiteDatabase = DatabaseHelper.getInstance(pContext);
        this.mSQLiteDatabase.setLocale(Locale.CHINA);
    }

在封装好的数据库表中,调用 SQLiteOpenHelper 的单例方法时,我传入的是上层传来的 pContext,而不是已经初始化好的 DatabaseContext(mContext)。

改一下就好了:

    private Context mContext;
    private static SQLiteDatabase mSQLiteDatabase;

    public PersonDB(Context pContext) {
        this.mContext = new DatabaseContext(pContext);
        this.mSQLiteDatabase = DatabaseHelper.getInstance(mContext);
        this.mSQLiteDatabase.setLocale(Locale.CHINA);
    }

马虎是病,得治…..((/- -)/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值