Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SQLite-openOrCreateDatabase()nullPointerException_Android_Sqlite - Fatal编程技术网

Android SQLite-openOrCreateDatabase()nullPointerException

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

我有以下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: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)