SQLiteOpenHelper 用单例模式实现后 onCreate 方法不执行的解决过程
2017-07-12 16:17
501 查看
前文介绍了过个进程访问数据库时数据库被锁的解决方法,就是用单例模式去实现 SQLiteOpenHelper 方法。详见 SQLiteDatabaseLockedException: database is locked 解决方法
然后回过头来运行时,又出现了问题,如题:就是 SQLiteOpenHelper 初始化后,里面的 onCreate 方法不执行,它不执行,数据库就创建不出来。在网上看示例时,没发现有什么地方是不一样的。
好吧,考(zhe)验(mo)人的时候又到了。
新建一个 demo,一步步仔细排查。
……过程不表。
最后确定问题:
因为我是将数据库文件存储在 sd 卡上的,所以是自定义了一个 Context 类(DatabaseContext)Android使用sqlliteOpenhelper更改数据库的存储路径放到SD卡上,在对数据库进行操作时,要把这个自定义的 DatabaseContext 赋值给传递进来的 Context。我恰恰就是犯了这个错误。
看下代码:
在封装好的数据库表中,调用 SQLiteOpenHelper 的单例方法时,我传入的是上层传来的 pContext,而不是已经初始化好的 DatabaseContext(mContext)。
改一下就好了:
马虎是病,得治…..((/- -)/
然后回过头来运行时,又出现了问题,如题:就是 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的onCreate(SQLiteDatabase db)方法调用时机的疑惑
- [android]关于SQLiteOpenHelper的onCreate(SQLiteDatabase db)方法调用时机
- 关于SQLiteOpenHelper的onCreate(SQLiteDatabase db)方法调用时机的疑惑
- 实现杂记(27):解决在onCreate()过程中获取View的width和Height为0的4种方法
- 关于SQLiteOpenHelper的onCreate(SQLiteDatabase db)方法调用时机的疑惑
- 解决android程序中oncreate方法中调用百度地图MKSearchListener接口不执行的问题
- Context与SQLiteDatabase的方法openOrCreateDatabase的区别 (context、SQLiteOpenHelper)
- SQLiteOpenHelper几个重要方法
- 使用SQLiteOpenHelper和单例模式操作SQLite数据库
- 模式窗口window.open造成Session丢失的解决方法
- MonoDroid学习笔记(十一)—— 使用SQLiteOpenHelper实现简易备忘录
- PHP PDO sqlite ,Unable to Open database file的解决方法
- 新浪魔兽世界3.1.3压缩包无法执行解决方法:Failed to open archive interface.MPQ
- Scala可以在交互模式下运行但无法执行脚本的解决方法
- Flask sqlite3.OperationalError: unable to open database file解决方法
- 模式窗口window.open造成Session丢失的解决方法
- SQLiteOpenHelper的实现
- 移动项目开发笔记(模式窗口,非模式窗口用window.open造成Session丢失的解决方法)
- 操作数据库之一(实现SQLiteOpenHelper绑定ListView)
- MonoDroid学习笔记(十一)—— 使用SQLiteOpenHelper实现简易备忘录