为什么这两行代码会抛出一个NPE?
SQLiteDatabase db;
db = openOrCreateDatabase("TestingData.db", SQLiteDatabase.CREATE_IF_NECESSARY, null);
堆栈跟踪:
08-23 10:33:14.285: ERROR/AndroidRuntime(1001): Caused by: java.lang.NullPointerException
08-23 10:33:14.285: ERROR/AndroidRuntime(1001): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
08-23 10:33:14.285: ERROR/AndroidRuntime(1001): at org.*****.android.CopyOfSQLLite.data(CopyOfSQLLite.java:14)
08-23 10:33:14.285: ERROR/AndroidRuntime(1001): at org.******.android.*****.****(****.java:200)
08-23 10:33:14.285: ERROR/AndroidRuntime(1001): at org.********.android.****.onCreate(DashboardPage.java:25)
08-23 10:33:14.285: ERROR/AndroidRuntime(1001): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
08-23 10:33:14.285: ERROR/AndroidRuntime(1001): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
答案 0 :(得分:1)
您的ContextWrapper没有基本上下文。很可能你并没有在正确的地方调用这种方法,但如果没有更多的代码,我就不能说更多。
答案 1 :(得分:0)
Android的优点在于它是open source。所以我们可以看到openOrCreateDatabase()
的实现方式如下:
public SQLiteDatabase openOrCreateDatabase(String name, int mode, CursorFactory factory) {
return mBase.openOrCreateDatabase(name, mode, factory);
}
我可以看到此代码抛出NPE的唯一方法是mBase
为空。从您的调用约定我假设您的类派生自android.content.ContextWrapper
?如果是这样,您确实在实例化类时设置了基本上下文(mBase
)吗?如果你不是,那就是造成这个问题的原因。