我看过类似的问题,但没有遇到同样的问题。
我的应用程序始终在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/

10-13 03:27