【问题标题】:Null Pointer Creating SQLite Database空指针创建 SQLite 数据库
【发布时间】:2011-08-23 10:40:05
【问题描述】:

为什么这两行代码会抛出 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)

【问题讨论】:

标签: android sqlite nullpointerexception


【解决方案1】:

您的 ContextWrapper 没有基本上下文。很可能您没有在正确的位置调用此方法,但如果没有更多代码,我不能说更多。

【讨论】:

    【解决方案2】:

    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)?如果你不是,那么这就是导致问题的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 2013-12-08
      • 1970-01-01
      • 2017-06-07
      • 1970-01-01
      • 2019-10-09
      • 1970-01-01
      相关资源
      最近更新 更多