hello!大家好啊!好久不见哈,有些日子没写博客了哈!不过我可没偷懒啊,我只不过去收集博客素材了,收获满满哦!好了,简单的嘘寒问暖过后,下面进入正题了哈!
你是否遇到过当你在android中自建了一个数据库,但是在运行它之后,突然爆了一个这样的错误:
Attempt to invoke virtual method ‘android.database.sqlite.SQLiteDatabase android.content.
Context.openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase$CursorFactory,
android.database.DatabaseErrorHandler)’ on a null object reference
这个错误有很多原因造成,然鹅android系统却只能给你报个这样笼统的错误详情,别急,我来为大家细数一些常见的错误,***建议每个方
法逐一尝试一遍***(不是全部,如果有额外的,请小伙伴们在下面评论,不要吝啬,互相学习嘛,嘻嘻嘻嘻)
**原因一:**可能你的虚拟机之前运行过这个程序,(这种情况是你的数据库是在你的项目运行过了一次之后加上去的)
解决方法一:(认真听哦!)在虚拟机上找到该程序对应的软件,然后卸载它,在重新运行该程序。
**原因二:**如果方法一行不通,可能你就要检查一下你的sql语句是否有错误喽!
**解决方法二:**检查sql语句是否有错误(没办法sql语句就是这样,你敲的时候有错他也不提示你,很无语!)
**原因三:**这也是我在试过网上给的解决办法之后任然没有解决问题我所遇到的比较憨憨的原因,希望你们不要像我一样这么憨憨,但还
是要说一下,万一遇到了同类呢!(哈哈哈哈,你过来呀!)这个原因就是我在调用数据库相关方法的时候(比如:query,intsert等)我传
入了一个空的内容,不理解是不是,看图:
哎呀!!!第二张图片有点跑题了,其实就是在写数据库相关方法的时候必须要加入context这个参数,因为数据库自带的构造方法中就有这
个,于是我明知道有这个参数,而我却没有给这个参数进行实例化,在fragment中这个参数就是getActivity或者getContext,然鹅我在一开始
声明了这个变量即Context context;然后却没有做这一步:context=getActivity();(是不是觉得自己很蠢!!!我恨。。。)另外,你看到这
咱们就是同类了(不要嘲笑我),哈哈哈哈!!
好了,总结一下吧!敲代码还是要细心啊!小心使得万年船!
(本篇文章没啥干货!纯属写写东西来骂醒自己,如果你们也跟我一样那也赶紧。。。你懂的!)
作者:简遇而安