Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.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 getWriteableDatabase()引发空指针异常_Android_Database_Sqlite_Nullpointerexception_Getwritabledatabase - Fatal编程技术网

Android getWriteableDatabase()引发空指针异常

Android getWriteableDatabase()引发空指针异常,android,database,sqlite,nullpointerexception,getwritabledatabase,Android,Database,Sqlite,Nullpointerexception,Getwritabledatabase,当我试图打开一个SQLiteDatabase时,我遇到了一个崩溃,我用空指针异常来编写它。 下面是我如何实例化SQLiteOpenHelper的: private final OpenHelper mOpenHelper; public static DataManager getInstance() { if (sInstance == null) { sInstance = new DataManager(); } return sInstance;

当我试图打开一个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)
03-1016:49:10.533:E/AndroidRuntime(8771):致命异常: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.(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.getwriteabledatabase(SQLiteOpenHelper.java:107)
03-10 16:49:10.533:E/AndroidRuntime(8771):在com.mywebsite.DataManager$OpenHelper.getwriteabledatabase(DataManager.java:282)
我在谷歌上搜索了源代码,但那一行没有包含任何应该引发异常的内容。我做错了什么?

我会在
新建OpenHelper()之前调用
loadLibs()


除此之外,我猜测
getWalletToken()
正在返回
null
MainApp.getInstance()
没有返回
null
,否则您将在
getWalletToken()
调用本身上崩溃。用户是如何提供此“钱包令牌的”

您是如何初始化的
mOpenHelper
?能否显示您对mOpenHelper的初始化?@gunar请查看我的edits@Sunil请参阅我的编辑CardDataManager的第二部分代码,或者它在其他地方?getWalletToken()确实返回null。我不认为这会是一个问题,但谢谢你让我看到这是一个问题!