我看过类似的问题,但我遇到了同样的问题。
我的应用程序一直在崩溃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())
答案 0 :(得分:2)
尝试使用cursor.getInt(2)代替getString(2),因为该列包含整数?
https://developer.android.com/reference/android/database/Cursor.html#getInt(int)
编辑:parseInt()显然不再需要了。
答案 1 :(得分:0)
您应该在cursor.moveToFirst()
方法getQuestionByType
之前使用cursor.getInt(0)
以确保查询有结果,然后您可以使用select.onchange = updateSubTema;