Android 房间无法打开数据库
Android room failed to open database
从 room dao 查询时崩溃。有人有想法吗?
它在 nexus 5 android 6.0 上运行良好,但在诺基亚 8 android 8.1
上崩溃
06-23 01:19:02.469 2652-2729/com.aaa.bbb E/SQLiteLog: (14) cannot open file at line 35807 of [605907e73a]
(14) os_unix.c:35807: (21) open(/data/user/0/com.aaa.bbb/files) -
06-23 01:19:02.472 2652-2729/com.aaa.bbb E/SQLiteDatabase: Failed to open database '/data/user/0/com.aaa.bbb/files'.
android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:210)
at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:194)
at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:493)
at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:200)
at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:192)
at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:864)
at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:849)
at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:724)
at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:714)
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:295)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:238)
at android.arch.persistence.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.getWritableSupportDatabase(FrameworkSQLiteOpenHelper.java:96)
at android.arch.persistence.db.framework.FrameworkSQLiteOpenHelper.getWritableDatabase(FrameworkSQLiteOpenHelper.java:54)
at android.arch.persistence.room.RoomDatabase.query(RoomDatabase.java:233)
at com.aaa.bbb.manager.db.CityAreaDao_Impl.compute(CityAreaDao_Impl.java:229)
at com.aaa.bbb.manager.db.CityAreaDao_Impl.compute(CityAreaDao_Impl.java:215)
at android.arch.lifecycle.ComputableLiveData.run(ComputableLiveData.java:100)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)
--------------------数据库管理员--------------------
@Database(entities = [(EMCityArea::class)], exportSchema = false, version = 1)
private abstract class EMDataBase : RoomDatabase() {
abstract fun cityAreakDao():CityAreaDao
}
class EMDBManager private constructor(){
companion object {
val share: EMDBManager by lazy { EMDBManager() }
}
private val db = Room.databaseBuilder(App.applicationContext(), EMDataBase::class.java,"dbfile.db").build()
val cityAreaDao:CityAreaDao
get() = db.cityAreakDao()
fun allCountry():LiveData<List<EMCityArea>>{
return cityAreaDao.allCounty()
}
}
--------------------查询-----------------
EMDBManager.share.allCountry().observe(this, Observer {coutryItems ->
if (coutryItems == null){return@Observer}
mCountryAdapter.clear()
mCountryAdapter.addAll(coutryItems.mapNotNull { it.name })
mCountryAdapter.notifyDataSetChanged()
})
崩溃是由于在我的应用程序中重写 getDatabasePath 引起的
override fun getDatabasePath(name: String?): File {
return filesDir
}
在我的例子中,只需删除该方法。
从 room dao 查询时崩溃。有人有想法吗? 它在 nexus 5 android 6.0 上运行良好,但在诺基亚 8 android 8.1
上崩溃06-23 01:19:02.469 2652-2729/com.aaa.bbb E/SQLiteLog: (14) cannot open file at line 35807 of [605907e73a]
(14) os_unix.c:35807: (21) open(/data/user/0/com.aaa.bbb/files) -
06-23 01:19:02.472 2652-2729/com.aaa.bbb E/SQLiteDatabase: Failed to open database '/data/user/0/com.aaa.bbb/files'.
android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:210)
at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:194)
at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:493)
at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:200)
at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:192)
at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:864)
at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:849)
at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:724)
at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:714)
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:295)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:238)
at android.arch.persistence.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.getWritableSupportDatabase(FrameworkSQLiteOpenHelper.java:96)
at android.arch.persistence.db.framework.FrameworkSQLiteOpenHelper.getWritableDatabase(FrameworkSQLiteOpenHelper.java:54)
at android.arch.persistence.room.RoomDatabase.query(RoomDatabase.java:233)
at com.aaa.bbb.manager.db.CityAreaDao_Impl.compute(CityAreaDao_Impl.java:229)
at com.aaa.bbb.manager.db.CityAreaDao_Impl.compute(CityAreaDao_Impl.java:215)
at android.arch.lifecycle.ComputableLiveData.run(ComputableLiveData.java:100)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)
--------------------数据库管理员--------------------
@Database(entities = [(EMCityArea::class)], exportSchema = false, version = 1)
private abstract class EMDataBase : RoomDatabase() {
abstract fun cityAreakDao():CityAreaDao
}
class EMDBManager private constructor(){
companion object {
val share: EMDBManager by lazy { EMDBManager() }
}
private val db = Room.databaseBuilder(App.applicationContext(), EMDataBase::class.java,"dbfile.db").build()
val cityAreaDao:CityAreaDao
get() = db.cityAreakDao()
fun allCountry():LiveData<List<EMCityArea>>{
return cityAreaDao.allCounty()
}
}
--------------------查询-----------------
EMDBManager.share.allCountry().observe(this, Observer {coutryItems ->
if (coutryItems == null){return@Observer}
mCountryAdapter.clear()
mCountryAdapter.addAll(coutryItems.mapNotNull { it.name })
mCountryAdapter.notifyDataSetChanged()
})
崩溃是由于在我的应用程序中重写 getDatabasePath 引起的
override fun getDatabasePath(name: String?): File {
return filesDir
}
在我的例子中,只需删除该方法。