Android Studio调用DatabaseHelper.addWord出现空指针异常如何解决
问题修复方案
1. 首要问题:DatabaseHelper实例未初始化导致空指针
报错明确指向DatabaseHelper.addWord被空对象调用,查看AddWords类代码,你仅声明了成员变量DatabaseHelper db;,没有对其进行实例化,直接调用方法就会触发空指针异常。
修复方式:在AddWords的onCreate方法中,控件初始化完成后添加实例化代码:
db = new DatabaseHelper(AddWords.this);
2. 次要问题:checkword方法逻辑错误
checkword方法存在两处问题,会导致单词重复校验完全失效:
- 查询表错误:当前校验单词重复时查询的是教师用户表
INSTRUCTORS_TABLE,实际应该查询单词表WORDS_TABLE - 查询条件语法错误:
selection参数缺少=?匹配符,会直接触发SQL语法异常
修复后的checkword方法代码:
public boolean checkword(String word){ String[] columns = {INDEX_WORDS}; SQLiteDatabase db = getReadableDatabase(); String selection = WORD + "=?"; String[] selectionArgs = {word}; Cursor cursor = db.query(WORDS_TABLE, columns,selection,selectionArgs,null,null, null); int count = cursor.getCount(); cursor.close(); db.close(); return count > 0; }
3. 潜在问题:onUpgrade方法删表逻辑错误
SQLite不支持单条DROP TABLE语句同时删除多个表,当前写法会导致数据库升级时直接报错,需要拆分删表语句:
修复后的onUpgrade方法代码:
@Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + INSTRUCTORS_TABLE); sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + STUDENTS_TABLE); sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + WORDS_TABLE); onCreate(sqLiteDatabase); }
内容的提问来源于stack exchange,提问作者sulaiman hayat
相关产品推荐
相关产品推荐

