美文网首页
SQLiteOpenHelper 用单例模式实现后 onCrea

SQLiteOpenHelper 用单例模式实现后 onCrea

作者: GinkWang | 来源:发表于2017-07-12 16:20 被阅读73次

前文介绍了过个进程访问数据库时数据库被锁的解决方法,就是用单例模式去实现 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);
}

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


相关文章

  • SQLiteOpenHelper 用单例模式实现后 onCrea

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

  • 单例模式和GCD单例实现

    1、传统单例模式2、GCD单例模式3、用宏实现GCD单例模式4、用宏实现GCD单例模式,名称随类名变化而变化 单例...

  • 单例模式

    一、实现单例模式 或者 二、透明的单例模式 三、用代理实现单例模式 四、JavaScript中的单例模式 在Jav...

  • 设计模式--单例模式

    单例模式概述 单例模式实现方式 为什么要使用单例模式 单例模式实现方式 饿汉式 类加载后就会将对象加载到内存中,保...

  • 单例模式

    1.利用装饰器实现单例模式 2.修改new方法实现单例模式 3.利用元类实现单例模式 总结: 用装饰器和元类实现的...

  • Android设计模式总结

    单例模式:饿汉单例模式://饿汉单例模式 懒汉单例模式: Double CheckLock(DCL)实现单例 Bu...

  • python面试题-2018.1.30

    问题:如何实现单例模式? 通过new方法来实现单例模式。 变体: 通过装饰器来实现单例模式 通过元类来创建单例模式...

  • kotlin实现单例模式

    1.懒汉式实现单例模式 2.线程安全懒汉式实现单例模式 3.双重校验懒汉式实现单例模式 4.静态内部类方式实现单例模式

  • 单例模式之枚举类enum

    通过枚举实现单例模式 枚举类实现单例模式的优点 对于饿汉式单例模式和懒汉式单例模式了解的同学,使用以上两种单例模式...

  • 单例模式

    单例模式及C++实现代码单例模式4种实现详解 c++11改进我们的模式之改进单例模式 单例模式(Singleton...

网友评论

      本文标题:SQLiteOpenHelper 用单例模式实现后 onCrea

      本文链接:https://www.haomeiwen.com/subject/divbhxtx.html