我看过类似的问题,但没有遇到同样的问题。
我的应用程序始终在addQuestion()方法上崩溃,并且我一生都无法指出问题所在。错误日志在行176 int difficulty = Integer.parseInt(cursor.getString(2));
上显示数字格式异常
我非常仔细地检查了代码,以查找可能的SQL语法错误,但是找不到任何东西。
这是我的addQuestion方法
public void addQuestion(Question question, String question_type){
SQLiteDatabase db = getWritableDatabase();
String query = "SELECT body FROM questions where body = '" +question.getBody()+"'";
Cursor cr = db.rawQuery(query, null);
if(cr.getCount() > 0){
db.close();
return;
}
else {
ContentValues cv = new ContentValues();
cv.put(type, question_type);
cv.put(body, question.getBody());
cv.put(answer, question.getAnswer());
cv.put(difficulty, question.getDifficulty());
try {
db.insert(questions_table, null, cv);
} catch (SQLiteException e) {
e.getMessage();
}
}
db.close();
}
这是我的getQuestion按类型方法:
public Question getQuestionByType(String type){
SQLiteDatabase db = getWritableDatabase();
String query = "SELECT " + body + "," + answer + "," + difficulty + " FROM " + questions_table + " WHERE "
+ this.type + " ='" + type+"';";
Cursor cursor = db.rawQuery(query, null);
cursor.moveToFirst();
String body = cursor.getString(0);
String answer = cursor.getString(1);
int difficulty = Integer.parseInt(cursor.getString(2));
db.close();
return new Question(type, body, answer, difficulty);
}
这是日志输出
java.lang.NumberFormatException: null
at java.lang.Integer.parseInt(Integer.java:483)
at java.lang.Integer.parseInt(Integer.java:556)
at com.maz.quizzdat.DbHandler.getQuestionByType(DbHandler.java:176)
at com.maz.quizzdat.MainActivity$1.onClick(MainActivity.java:47)
任何帮助表示赞赏。
编辑:
对于可能遇到类似情况的人,即使字符串实际上是数字,也不能在这种特殊情况下对字符串使用
Integer.parseInt();
。使用curser.getInt()
代替Integer.parseInt(curser.getString())
最佳答案
尝试使用cursor.getInt(2)而不是getString(2),因为该列包含Integer?
https://developer.android.com/reference/android/database/Cursor.html#getInt(int)
编辑:parseInt()显然不再需要了。
关于java - 从SQLITE数据库表中提取整数时,数字格式异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43969426/