Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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
Android 将实体插入我的房间数据库后应用程序崩溃_Android_Kotlin_Android Room - Fatal编程技术网

Android 将实体插入我的房间数据库后应用程序崩溃

Android 将实体插入我的房间数据库后应用程序崩溃,android,kotlin,android-room,Android,Kotlin,Android Room,我是房间数据库的新手,我正在尝试创建一个数据库,以便在我的列表中插入单词(每次会从我那里得到2个单词) 所以我想测试它,但我得到了这个错误 E/AndroidRuntime: FATAL EXCEPTION: main Process: com.paradise.personaldictionary, PID: 9307 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.paradise.

我是房间数据库的新手,我正在尝试创建一个数据库,以便在我的列表中插入单词(每次会从我那里得到2个单词) 所以我想测试它,但我得到了这个错误

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.paradise.personaldictionary, PID: 9307
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.paradise.personaldictionary/com.paradise.personaldictionary.MainActivity}: java.lang.IllegalArgumentException: File EN/FA_DB contains a path separator
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3308)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3457)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2044)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:224)
        at android.app.ActivityThread.main(ActivityThread.java:7562)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
     Caused by: java.lang.IllegalArgumentException: File EN/FA_DB contains a path separator
        at android.app.ContextImpl.makeFilename(ContextImpl.java:2671)
        at android.app.ContextImpl.getDatabasePath(ContextImpl.java:865)
        at android.content.ContextWrapper.getDatabasePath(ContextWrapper.java:341)
        at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:371)
        at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:317)
        at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.getWritableSupportDatabase(FrameworkSQLiteOpenHelper.java:145)
        at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper.getWritableDatabase(FrameworkSQLiteOpenHelper.java:106)
        at androidx.room.RoomDatabase.inTransaction(RoomDatabase.java:622)
        at androidx.room.RoomDatabase.assertNotSuspendingTransaction(RoomDatabase.java:399)
        at com.paradise.personaldictionary.roomdb.WordsDao_Impl.insert(WordsDao_Impl.java:77)
        at com.paradise.personaldictionary.MainActivity.test(MainActivity.kt:55)
        at com.paradise.personaldictionary.MainActivity.onCreate(MainActivity.kt:23)
        at android.app.Activity.performCreate(Activity.java:7893)
        at android.app.Activity.performCreate(Activity.java:7880)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3283)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3457) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2044) 
        at android.os.Handler.dispatchMessage(Handler.java:107) 
        at android.os.Looper.loop(Looper.java:224) 
        at android.app.ActivityThread.main(ActivityThread.java:7562) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950) 
这是他告诉我的修正错误的方法

at com.paradise.personaldictionary.roomdb.WordsDao_Impl.insert(WordsDao_Impl.java:77)
        at com.paradise.personaldictionary.MainActivity.test(MainActivity.kt:55)
        at com.paradise.personaldictionary.MainActivity.onCreate(MainActivity.kt:23)
这是关于我的插入函数

这是我在wordsDao课堂上的乐趣

 @Insert
    fun insert( words: Words)
还有我在活动主目录中的趣味测试()

fun test(){
        val db: AppDatabase = AppDatabase.getDatabase(this)
        var firstword = Words("Hello","salam")
        db.wordsDao().insert(firstword)
        var getDb = db.wordsDao().getAll()
    }
更新 新错误

  Accessing hidden field Landroid/database/sqlite/SQLiteDatabase;->mLock:Ljava/lang/Object; (greylist-max-o, linking, denied)
    Accessing hidden method Landroid/database/sqlite/SQLiteDatabase;->throwIfNotOpenLocked()V (greylist-max-o, linking, denied)
    Accessing hidden field Landroid/database/sqlite/SQLiteDatabase;->mLock:Ljava/lang/Object; (greylist-max-o, linking, denied)
    Accessing hidden method Landroid/database/sqlite/SQLiteDatabase;->throwIfNotOpenLocked()V (greylist-max-o, linking, denied)
    Accessing hidden method Landroid/database/sqlite/SQLiteSession;->setTransactionSuccessful()V (greylist-max-o, linking, denied)
    Accessing hidden method Landroid/content/ContentValues;->isEmpty()Z (greylist-max-o, linking, denied)
    Accessing hidden method Landroid/database/sqlite/SQLiteDatabase;->getThreadDefaultConnectionFlags(Z)I (greylist-max-o, linking, denied)
    Accessing hidden method Landroid/database/sqlite/SQLiteDatabase;->yieldIfContendedHelper(ZJ)Z (greylist-max-o, linking, denied)
I/chatty: uid=10415(com.paradise.personaldictionary) ection primary] identical 1 line
W/sonaldictionar: Accessing hidden method Landroid/database/sqlite/SQLiteDatabase;->yieldIfContendedHelper(ZJ)Z (greylist-max-o, linking, denied)
V/StudioTransport: Handling agent command 1200 for pid: 19307.
I/sonaldictionar: ProcessProfilingInfo new_methods=1550 is saved saved_to_disk=1 resolve_classes_delay=8000
在我的logcat和debug窗口中有大量这样的行

这是您的问题:

原因:java.lang.IllegalArgumentException:File EN/FA_DB包含路径分隔符

在初始化数据库时,似乎传递了一个无效的文件名

在某个地方,你正在做这样的事情:

Room.databaseBuilder(applicationContext, AppDatabase::class.java, "EN/FA_DB")
不允许使用
“EN/FA_DB”
。您只需指定一个不包含路径分隔符或其他特殊字符的文件名。类似于
“test.db”

这是您的问题:

原因:java.lang.IllegalArgumentException:File EN/FA_DB包含路径分隔符

在初始化数据库时,似乎传递了一个无效的文件名

在某个地方,你正在做这样的事情:

Room.databaseBuilder(applicationContext, AppDatabase::class.java, "EN/FA_DB")

不允许使用
“EN/FA_DB”
。您只需指定一个不包含路径分隔符或其他特殊字符的文件名。类似于
“test.db”

你能发布完整的MainActivity.kt文件吗?你能发布完整的MainActivity.kt文件吗?它正在工作谢谢,应用程序不再崩溃,但仍然不工作。它说明了SQL中拒绝访问的情况。我会质疑这个错误。这些错误可能可以忽略。你怎么知道“它不工作”?你的设备(或模拟器)运行的是什么版本的Android?你的targetSDK是什么?另外,你的应用程序中是否使用了任何第三方库?它正在工作,谢谢,应用程序不再崩溃,但仍然不工作。它说明了SQL中拒绝访问的情况。我会质疑这个错误。这些错误可能可以忽略。你怎么知道“它不工作”?你的设备(或模拟器)运行的是什么版本的Android?什么是您的targetSDK?另外,您是否在应用程序中使用任何第三方库?