【问题标题】:getWriteableDatabase() throws Null Pointer ExceptiongetWriteableDatabase() 抛出空指针异常
【发布时间】:2014-03-10 20:58:07
【问题描述】:

我在尝试打开 SQLiteDatabase 时遇到了崩溃,该 SQLiteDatabase 用于写入空指针异常。 下面是我实例化 SQLiteOpenHelper 的方法:

private final OpenHelper mOpenHelper;

public static DataManager getInstance() {
    if (sInstance == null) {
        sInstance = new DataManager();
    }
    return sInstance;
}

private DataManager() {
    mOpenHelper = new OpenHelper(MainApp.getInstance(), MainApp.getInstance().getWalletToken());
    SQLiteDatabase.loadLibs(MainApp.getInstance());
}

MainApp 是我的应用程序对象。

这是我想要做的:

    SQLiteDatabase db = null;
    try {
        db = mOpenHelper.getWritableDatabase();

        for (Card card : cards) {
            if (card == null) {
                continue;
            }

            addCard(card, db);

            ContentValues values = new ContentValues();
            values.put(DataEntry.COLUMN_NAME_NICKNAME, card.getNickname());

            File imageFile = getImageFile(Integer.toString(card.getIndex()));
            if (ImageUtils.saveImage(card.getCardImage(), imageFile)) {
                values.put(DataEntry.COLUMN_NAME_IMAGE_FILE, imageFile.getAbsolutePath());
            }

            String whereClause = DataEntry.COLUMN_NAME_CARD_INDEX + " = "
                    + card.getIndex();
            db.update(DataEntry.TABLE_NAME, values, whereClause, null);
        }
    } finally {
        if (db != null) {
            db.close();
        }
    }        

这是崩溃输出:

03-10 16:49:10.533: E/AndroidRuntime(8771): FATAL EXCEPTION: main
03-10 16:49:10.533: E/AndroidRuntime(8771): java.lang.NullPointerException
03-10 16:49:10.533: E/AndroidRuntime(8771):     at net.sqlcipher.database.SQLiteDatabase.<init>(SQLiteDatabase.java:1957)
03-10 16:49:10.533: E/AndroidRuntime(8771):     at net.sqlcipher.database.SQLiteDatabase.openDatabase(SQLiteDatabase.java:901)
03-10 16:49:10.533: E/AndroidRuntime(8771):     at net.sqlcipher.database.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:944)
03-10 16:49:10.533: E/AndroidRuntime(8771):     at net.sqlcipher.database.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:107)
03-10 16:49:10.533: E/AndroidRuntime(8771):     at com.mywebsite.DataManager$OpenHelper.getWritableDatabase(DataManager.java:282)

我搜索了源代码,但该特定行不包含任何应该引发异常的内容。我做错了什么?

【问题讨论】:

  • 你是如何初始化mOpenHelper的?
  • 你能展示你对 mOpenHelper 的初始化吗?
  • @gunar 请查看我的编辑
  • @Sunil 请看我的编辑
  • 第二部分代码是 CardDataManager 的一部分还是其他地方?

标签: android database sqlite nullpointerexception getwritabledatabase


【解决方案1】:

我会在new OpenHelper() 之前拨打loadLibs()

除此之外,我猜getWalletToken() 正在返回nullMainApp.getInstance() 不会返回 null,否则您将在 getWalletToken() 调用本身上崩溃。用户如何提供这个“钱包令牌”?

【讨论】:

  • getWalletToken() 确实返回 null。我不认为这会是一个问题,但谢谢你告诉我这是一个问题!
猜你喜欢
  • 1970-01-01
  • 2020-11-22
  • 2020-08-10
  • 2013-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多