Android SQLite-openOrCreateDatabase()nullPointerException
我有以下DBAdapter(这不是全部,但它是相关代码) 当我尝试Android SQLite-openOrCreateDatabase()nullPointerException,android,sqlite,Android,Sqlite,我有以下DBAdapter(这不是全部,但它是相关代码) 当我尝试db.open()时,我得到以下结果: FATAL EXCEPTION: main java.lang.RuntimeException: Unable to instantiate application com.company.app.MyApp: java.lang.NullPointerException at android.app.LoadedApk.makeApplication(LoadedApk.java
db.open()
时,我得到以下结果:
FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to instantiate application com.company.app.MyApp: java.lang.NullPointerException
at android.app.LoadedApk.makeApplication(LoadedApk.java:466)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3260)
at android.app.ActivityThread.access$2200(ActivityThread.java:117)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:969)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3683)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:118)
at com.company.app.DBAdapter.open(DBAdapter.java:74)
at com.company.app.MyApp.<init>(MyApp.java:106)
at java.lang.Class.newInstanceImpl(Native Method)
at java.lang.Class.newInstance(Class.java:1409)
at android.app.Instrumentation.newApplication(Instrumentation.java:957)
at android.app.Instrumentation.newApplication(Instrumentation.java:942)
at android.app.LoadedApk.makeApplication(LoadedApk.java:461)
致命异常:main
java.lang.RuntimeException:无法实例化应用程序com.company.app.MyApp:java.lang.NullPointerException
在android.app.LoadedApk.makeApplication上(LoadedApk.java:466)
位于android.app.ActivityThread.handleBindApplication(ActivityThread.java:3260)
在android.app.ActivityThread.access$2200(ActivityThread.java:117)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:969)上
位于android.os.Handler.dispatchMessage(Handler.java:99)
位于android.os.Looper.loop(Looper.java:130)
位于android.app.ActivityThread.main(ActivityThread.java:3683)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:507)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:839)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
在dalvik.system.NativeStart.main(本机方法)
原因:java.lang.NullPointerException
位于android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
位于android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:118)
位于com.company.app.DBAdapter.open(DBAdapter.java:74)
在com.company.app.MyApp上。(MyApp.java:106)
位于java.lang.Class.newInstanceImpl(本机方法)
位于java.lang.Class.newInstance(Class.java:1409)
位于android.app.Instrumentation.newApplication(Instrumentation.java:957)
位于android.app.Instrumentation.newApplication(Instrumentation.java:942)
在android.app.LoadedApk.makeApplication(LoadedApk.java:461)上
它似乎遇到了某种异常,与帮助者决定是否创建或更新数据库有关…尝试在数据库名称的末尾添加一个扩展名,如“.db”。我刚刚遇到这个问题,可能是出于不同的原因。在调用onCreate()之前,我尝试了一些与db相关的涉及上下文的操作。希望这有助于其他人如果确切的问题是上下文,那么我可以提出建议,因为我昨天遇到了同样的问题 假设我从另一个类调用DatabaseHelper,那么我必须提供上下文。我对以下哪种情况感到困惑: 1.getApplicationContext() 2.getBaseContext() 3.已在调用DatabaseHelper对象的类的构造函数中初始化的上下文的实例,即_Context 但我得到的实际解决方案是使用这个 例如:-
DatabaseHelper dbHelper=新的DatabaseHelper(this) 这只是“卖方”的一个常量。很抱歉,我没有输入所有常量,我会在上面的代码中添加我需要的内容。这几乎肯定是由于传入的
上下文为null
——没有任何其他内容会导致NPE。我相信这就是问题所在,Philipp。如果你想正确回答下面的问题,我会给你评分。好吧,我用另一种方法解决了。。我不知道我做了什么。我认为这是一个背景问题。我猜应用程序上下文从未传递给DBAdapter或其他什么。。。名称末尾添加的.db的处理方式是什么?这是一个已知的修复方法还是推荐的命名方法?这只是我一直被教导的方式。如果文件系统不关心没有扩展名,我不知道这有什么意义。数据库名后面只是一个文件名。如上所述,最好是put.dbIt。这是一个约定。只要您使用相同的名称,它就不会影响任何代码。请确保通过@joeplante看到真正的答案,这就是原因。公认的答案令人困惑。从问题的堆栈跟踪中可以明显看出问题:数据库在MyApp.
中打开,即成员变量初始化,远远早于onCreate()
。
FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to instantiate application com.company.app.MyApp: java.lang.NullPointerException
at android.app.LoadedApk.makeApplication(LoadedApk.java:466)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3260)
at android.app.ActivityThread.access$2200(ActivityThread.java:117)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:969)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3683)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:118)
at com.company.app.DBAdapter.open(DBAdapter.java:74)
at com.company.app.MyApp.<init>(MyApp.java:106)
at java.lang.Class.newInstanceImpl(Native Method)
at java.lang.Class.newInstance(Class.java:1409)
at android.app.Instrumentation.newApplication(Instrumentation.java:957)
at android.app.Instrumentation.newApplication(Instrumentation.java:942)
at android.app.LoadedApk.makeApplication(LoadedApk.java:461)