Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database Kotlin:未创建sqlite数据库表_Database_Sqlite_Android Studio_Kotlin_Crash - Fatal编程技术网

Database Kotlin:未创建sqlite数据库表

Database Kotlin:未创建sqlite数据库表,database,sqlite,android-studio,kotlin,crash,Database,Sqlite,Android Studio,Kotlin,Crash,我是科特林的新手。我正在开发一个“个性猜测”应用程序。它工作得很好,但当我在运行时添加SQLite数据库时,当我到达集成了SQLite的活动时,它会不断崩溃。我的表不创建 错误日志: 2020-06-04 13:18:10.757 16744-16744/? E/example.guessm:运行时设置的未知位\u标志:0x8000 2020-06-04 13:18:12.088 16744-16776/com.example.guessme E/eglcodecommon:glUtilsPa

我是科特林的新手。我正在开发一个“个性猜测”应用程序。它工作得很好,但当我在运行时添加SQLite数据库时,当我到达集成了SQLite的活动时,它会不断崩溃。我的表不创建

错误日志: 2020-06-04 13:18:10.757 16744-16744/? E/example.guessm:运行时设置的未知位\u标志:0x8000 2020-06-04 13:18:12.088 16744-16776/com.example.guessme E/eglcodecommon:glUtilsParamSize:unknow参数0x000082da 2020-06-04 13:18:12.088 16744-16776/com.example.guessme E/eglcodecommon:glUtilsParamSize:unknow参数0x000082da 2020-06-04 13:18:33.961 16744-16744/com.example.guessme E/AndroidRuntime:FATAL EXCEPTION:main 进程:com.example.guessme,PID:16744 java.lang.RuntimeException:无法启动活动组件信息{com.example.guestme/com.example.guestme.quizaActivity}:java.lang.IllegalStateException:getDatabase递归调用 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270)上 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)上 在android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 在android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)中 在android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)中 在android.app.ActivityThread$H.handleMessage上(ActivityThread.java:2016) 位于android.os.Handler.dispatchMessage(Handler.java:107) 位于android.os.Looper.loop(Looper.java:214) 位于android.app.ActivityThread.main(ActivityThread.java:7356) 位于java.lang.reflect.Method.invoke(本机方法) 位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 原因:java.lang.IllegalStateException:递归调用getDatabase 位于android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:357) 位于android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:317) 在com.example.guessme.DbHelper.addQuestion(DbHelper.kt:80)上 在com.example.guessme.DbHelper.addQuestions上(DbHelper.kt:45) 在com.example.guessme.DbHelper.onCreate上(DbHelper.kt:35) 位于android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:412) 位于android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:341) 在com.example.guessme.DbHelper.getAllQuestions(DbHelper.kt:93)上 在com.example.guessme.QuizActivity.onCreate上(QuizActivity.kt:29) 位于android.app.Activity.performCreate(Activity.java:7802) 位于android.app.Activity.performCreate(Activity.java:7791) 位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299) 位于android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)上 在android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 在android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)中 在android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)中 在android.app.ActivityThread$H.handleMessage上(ActivityThread.java:2016) 位于android.os.Handler.dispatchMessage(Handler.java:107) 位于android.os.Looper.loop(Looper.java:214) 位于android.app.ActivityThread.main(ActivityThread.java:7356) 位于java.lang.reflect.Method.invoke(本机方法) 位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

DbHelper类中onCreate方法的代码段:

 private val DATABASE_VERSION = 2
// Database Name
private val DATABASE_NAME = "PersonalityQuiz.db"
// tasks table name
 lateinit var dbase: SQLiteDatabase

class DbHelper (context: Context) : SQLiteOpenHelper(context, DATABASE_NAME, null, DATABASE_VERSION) {

override fun onCreate(db: SQLiteDatabase) {
        dbase = db
        val sql = ("CREATE TABLE IF NOT EXISTS " + TABLE_QUEST + " ( "
                + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_QUES
                + " TEXT, " + KEY_OPTA + " TEXT, "
                + KEY_OPTB + " TEXT, " + KEY_OPTC + " TEXT)")
        db.execSQL(sql)
        addQuestions()
        db.close()
    }
addQuestions函数的代码段,我在其中向数据库插入问题:

// Adding new question
     fun addQuestion(quest: Question) {
      dbase = this.writableDatabase
            val values = ContentValues()
            values.put(KEY_QUES, quest.getQUESTION())
            values.put(KEY_OPTA, quest.getOPTA())
            values.put(KEY_OPTB, quest.getOPTB())
            values.put(KEY_OPTC, quest.getOPTC())
            // Inserting Row
            dbase.insert(TABLE_QUEST, null, values)
        }
onUpgrade方法的代码snipppet:

override fun onUpgrade(db: SQLiteDatabase, oldV: Int, newV: Int) {
        // Drop older table if existed
        db.execSQL("DROP TABLE IF EXISTS $TABLE_QUEST")
        // Create tables again
         onCreate(db)
    }

您无法访问
onCreate()
中的
writableDatabase


onCreate()
中删除
addQuestions()
调用,或者将
onCreate()
中的
SQLiteDatabase
作为参数传递到
addQuestions()

欢迎使用堆栈溢出,请阅读。包含足够的代码以允许其他人重现问题。要获得这方面的帮助,请阅读“嗨”。让我添加一些可能导致错误的代码片段我已经尝试过了,现在新的错误开始出现,但问题仍然存在,i-e表尚未创建,应用程序仍然崩溃