getWriteableDatabase() генерирует исключение нулевого указателя
Я получаю сбой при попытке открыть базу данных SQLite для записи с исключением из нулевого указателя. Вот как я создаю экземпляр 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)
Я гуглил исходный код, но эта конкретная строка не содержит ничего, что должно вызывать исключение. Что я делаю неправильно?
1 ответ
Решение
Я бы позвонил loadLibs()
до new OpenHelper()
,
Кроме того, я думаю, что getWalletToken()
возвращается null
, MainApp.getInstance()
не возвращается null
в противном случае вы бы упали на getWalletToken()
позвони сам. Как пользователь предоставляет этот "токен кошелька"?