java - 单击开始按钮后应用程序崩溃
问题描述
我是使用 Android Studio 的新手,并且一直在使用 youtube 上的指南来开发测验应用程序。到目前为止,一切都在工作,直到试图把我的问题数据库带过来。在我保存代码并在物理设备上重新运行代码后,应用程序将打开,但当我单击开始按钮时,应用程序关闭。在 logcat 中,我收到运行时错误
java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.example.greencrosscodev1/com.example.greencrosscodev1.QuizSection}:
android.database.sqlite.SQLiteException: AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY
(code 1 SQLITE_ERROR[1]): , while compiling: CREATE TABLE quiz_question ( _idINTEGER PRIMARY KEY
AUTOINCREMENT, questionTEXT, option1TEXT, option2TEXT, option3TEXT, answer_nrINTEGER)
通过在上面的代码中说同样的话,它给了我一个原因。我来的第一个蓝色超链接也将我带到我的 QuizDbHelper.java 到下面显示的第 40 行。之后是一整页的代码。任何建议都会被采纳
package com.example.greencrosscodev1;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import com.example.greencrosscodev1.QuizContract.*;
import androidx.annotation.Nullable;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;
public class QuizDbHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME ="GreenCrossCodeQuiz.db";
private static final int DATABASE_VERSION = 1;
private SQLiteDatabase db;
public QuizDbHelper(@Nullable Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
this.db= db;
final String SQL_CREATE_QUESTION_TABLE ="CREATE TABLE " +
QuestionTable.TABLE_NAME + " ( " +
QuestionTable._ID + "INTEGER PRIMARY KEY AUTOINCREMENT, " +
QuestionTable.COLUMN_QUESTION + "TEXT, " +
QuestionTable.COLUMN_OPTION1 + "TEXT, " +
QuestionTable.COLUMN_OPTION2 + "TEXT, " +
QuestionTable.COLUMN_OPTION3 + "TEXT, " +
QuestionTable.COLUMN_ANSWER_NR + "INTEGER" + ")";
db.execSQL(SQL_CREATE_QUESTION_TABLE);
fillQuestionTable();
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + QuestionTable.TABLE_NAME);
onCreate(db);
}
private void fillQuestionTable(){
Question Q1 = new Question("A is correct","A","B","C", 1);
addQuestion(Q1);
Question Q2 = new Question("B is correct","A","B","C", 2);
addQuestion(Q2);
Question Q3 = new Question("C is correct","A","B","C", 3);
addQuestion(Q3);
Question Q4 = new Question("A is correct again","A","B","C", 1);
addQuestion(Q4);
Question Q5 = new Question("B is correct again","A","B","C", 2);
addQuestion(Q5);
}
private void addQuestion(Question question){
ContentValues cv = new ContentValues();
cv.put(QuestionTable.COLUMN_QUESTION, question.getQuestion());
cv.put(QuestionTable.COLUMN_OPTION1, question.getOption1());
cv.put(QuestionTable.COLUMN_OPTION2, question.getOption2());
cv.put(QuestionTable.COLUMN_OPTION3, question.getOption3());
cv.put(QuestionTable.COLUMN_ANSWER_NR, question.getAnswerNumber());
db.insert(QuestionTable.TABLE_NAME, null, cv);
}
public List<Question> getAllQuestions(){
List<Question> questionList = new ArrayList<>();
db = getReadableDatabase();
Cursor c = db.rawQuery("SELECT * FROM " + QuestionTable.TABLE_NAME, null);
if(c.moveToFirst()){
do {
Question question = new Question();
question.setQuestion(c.getString(c.getColumnIndex(QuestionTable.COLUMN_QUESTION)));
question.setOption1(c.getString(c.getColumnIndex(QuestionTable.COLUMN_OPTION1)));
question.setOption2(c.getString(c.getColumnIndex(QuestionTable.COLUMN_OPTION2)));
question.setOption3(c.getString(c.getColumnIndex(QuestionTable.COLUMN_OPTION3)));
question.setAnswerNumber(c.getInt(c.getColumnIndex(QuestionTable.COLUMN_ANSWER_NR)));
questionList.add(question);
} while (c.moveToNext());
}
c.close();
return questionList;
}
}
解决方案
推荐阅读
- react-native - ScrollView 无法使用 FlatList 水平滚动
- laravel - 引导安装后 npm run dev 错误
- nosql - 用于乐观锁定的属性的约定?
- java - 如何在 Android 中将 Recyclerview 转换为 PDF?
- javascript - this 在类和 setTimeout 中的上下文是 JavaScript
- java - 仅显示来自 java 中 xml 的特定元素的值
- c# - Identity asp.net core 3.0 - 找不到 IdentityDbContext IdentityDbContext
找不到合适的方法来覆盖 - python - 通过 CSV 文件运行并将当前条目和以前条目之间的正差异添加到变量的代码
- c# - Xaml 按钮命令不会触发
- r - 如何绘制具有 10 列的数据框?