Android SQLiteOpenHelper getInstance()方法引发空指针异常

Android SQLiteOpenHelper getInstance()方法引发空指针异常,android,sqlite,android-sqlite,sqliteopenhelper,Android,Sqlite,Android Sqlite,Sqliteopenhelper,我的应用程序中有一个DatabaseHelper类(下面是一个代码片段): 我添加了getInstance()方法来保证singleton属性,因为我需要在应用程序的各个位置访问我的数据库,同时只使用一个实例。 编辑:在扩展IntentService的类的最开始部分,我使用下面的代码初始化帮助程序(因此它不是活动,也没有onCreate()方法) 然而,这会导致我的应用程序失败,出现“线程以未捕获的异常退出”,然后出现“NullPointerException”。我在这里做错了什么?我是否正确初

我的应用程序中有一个DatabaseHelper类(下面是一个代码片段):

我添加了getInstance()方法来保证singleton属性,因为我需要在应用程序的各个位置访问我的数据库,同时只使用一个实例。 编辑:在扩展IntentService的类的最开始部分,我使用下面的代码初始化帮助程序(因此它不是活动,也没有onCreate()方法)

然而,这会导致我的应用程序失败,出现“线程以未捕获的异常退出”,然后出现“NullPointerException”。我在这里做错了什么?我是否正确初始化帮助程序? 下面是日志:

07-08 13:29:16.896  25205-25205/edu.swarthmore.cs.mdash.activitytype D/Place:﹕ in getInstance of DBHelper
07-08 13:29:16.897  25205-25205/edu.swarthmore.cs.mdash.activitytype D/AndroidRuntime﹕ Shutting down VM
07-08 13:29:16.898  25205-25205/edu.swarthmore.cs.mdash.activitytype W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x418f8d40)
07-08 13:29:16.910  25205-25205/edu.swarthmore.cs.mdash.activitytype E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: edu.swarthmore.cs.mdash.activitytype, PID: 25205
java.lang.RuntimeException: Unable to instantiate service edu.swarthmore.cs.mdash.activitytype.ActivityRecognitionIntentService: java.lang.NullPointerException
        at android.app.ActivityThread.handleCreateService(ActivityThread.java:2570)
        at android.app.ActivityThread.access$1800(ActivityThread.java:139)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5086)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
        at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.NullPointerException
        at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:109)
        at edu.swarthmore.cs.mdash.activitytype.DatabaseHelper.getInstance(DatabaseHelper.java:35)
        at edu.swarthmore.cs.mdash.activitytype.ActivityRecognitionIntentService.<init>(ActivityRecognitionIntentService.java:52)
        at java.lang.Class.newInstanceImpl(Native Method)
        at java.lang.Class.newInstance(Class.java:1208)
        at android.app.ActivityThread.handleCreateService(ActivityThread.java:2567)
        at android.app.ActivityThread.access$1800(ActivityThread.java:139)
07-08 13:29:16.896 25205-25205/edu.swartmore.cs.mdash.activitytype D/地点:﹕ 在DBHelper的getInstance中
07-08 13:29:16.897 25205-25205/edu.swartmore.cs.mdash.activitytype D/AndroidRuntime﹕ 关闭虚拟机
07-08 13:29:16.898 25205-25205/edu.swartmore.cs.mdash.activitytype W/dalvikvm﹕ threadid=1:线程以未捕获异常退出(组=0x418f8d40)
07-08 13:29:16.910 25205-25205/edu.swartmore.cs.mdash.activitytype E/AndroidRuntime﹕ 致命异常:主
流程:edu.swartmore.cs.mdash.activitytype,PID:25205
java.lang.RuntimeException:无法实例化服务edu.swartmore.cs.mdash.activitytype.ActivityRecognitionIntentService:java.lang.NullPointerException
位于android.app.ActivityThread.handleCreateService(ActivityThread.java:2570)
在android.app.ActivityThread.access$1800(ActivityThread.java:139)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292)
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:136)
位于android.app.ActivityThread.main(ActivityThread.java:5086)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:515)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
在dalvik.system.NativeStart.main(本机方法)
原因:java.lang.NullPointerException
位于android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:109)
位于edu.swartmore.cs.mdash.activitytype.DatabaseHelper.getInstance(DatabaseHelper.java:35)
位于edu.swartmore.cs.mdash.activitytype.ActivityRecognitionIntentService。(ActivityRecognitionIntentService.java:52)
位于java.lang.Class.newInstanceImpl(本机方法)
位于java.lang.Class.newInstance(Class.java:1208)
位于android.app.ActivityThread.handleCreateService(ActivityThread.java:2567)
在android.app.ActivityThread.access$1800(ActivityThread.java:139)

初始化某些
上下文
类(如
活动
)的成员变量时,调用该方法太早了(如
private
所示)。此时上下文尚未设置,由于缺少基本上下文,调用
getApplicationContext()
将导致NPE


Context
仅在生命周期中的
onCreate()
之前设置。将初始化移动到
onCreate()

看起来您的上下文可能是空的Post logcat exception。并显示您调用此方法的位置好的,我添加了更多信息-希望这有助于清除它!好的,上下文调用NPE是有道理的。但是,如果我想在一个没有onCreate()的服务类中初始化数据库帮助程序,我应该把它放在哪里?服务有onCreate(),我将我的初始化移到了类的更底层(在onHandleContent()中,因为这是一个IntentService类,我不应该直接调用onCreate()。但那起作用了,所以谢谢你!
private DatabaseHelper db = DatabaseHelper.getInstance(this);
07-08 13:29:16.896  25205-25205/edu.swarthmore.cs.mdash.activitytype D/Place:﹕ in getInstance of DBHelper
07-08 13:29:16.897  25205-25205/edu.swarthmore.cs.mdash.activitytype D/AndroidRuntime﹕ Shutting down VM
07-08 13:29:16.898  25205-25205/edu.swarthmore.cs.mdash.activitytype W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x418f8d40)
07-08 13:29:16.910  25205-25205/edu.swarthmore.cs.mdash.activitytype E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: edu.swarthmore.cs.mdash.activitytype, PID: 25205
java.lang.RuntimeException: Unable to instantiate service edu.swarthmore.cs.mdash.activitytype.ActivityRecognitionIntentService: java.lang.NullPointerException
        at android.app.ActivityThread.handleCreateService(ActivityThread.java:2570)
        at android.app.ActivityThread.access$1800(ActivityThread.java:139)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5086)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
        at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.NullPointerException
        at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:109)
        at edu.swarthmore.cs.mdash.activitytype.DatabaseHelper.getInstance(DatabaseHelper.java:35)
        at edu.swarthmore.cs.mdash.activitytype.ActivityRecognitionIntentService.<init>(ActivityRecognitionIntentService.java:52)
        at java.lang.Class.newInstanceImpl(Native Method)
        at java.lang.Class.newInstance(Class.java:1208)
        at android.app.ActivityThread.handleCreateService(ActivityThread.java:2567)
        at android.app.ActivityThread.access$1800(ActivityThread.java:139)