Android 将实体插入我的房间数据库后应用程序崩溃
我是房间数据库的新手,我正在尝试创建一个数据库,以便在我的列表中插入单词(每次会从我那里得到2个单词) 所以我想测试它,但我得到了这个错误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.
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?另外,您是否在应用程序中使用任何第三方库?