如何解决createFromFile不填充数据库-Room MainActivity AppDatabase PlanInfoDao PlanInfo
编辑:09/30
由于@shb,我确定createFromFile()不能按预期正确地填充数据库。
如果任何人都可以指出我做错了/错过的事情,那就太好了!请参考下图以获取有关数据库结构的参考。预先感谢!
MainActivity
class MainActivity: AppCompatActivity() {
lateinit var mDatabase: AppDatabase
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mDatabase = AppDatabase.getInstance(this)
}
fun getFacilityNbr() {
val planInfo = mDatabase.getPlanInfoDao().getPlanInfo()
Log.d("MainActivity","Size = ${planInfo.size}") // 0
}
}
AppDatabase
@Database(entities = [PlanInfo::class],version = 1)
abstract class AppDatabase: RoomDatabase() {
companion object {
@Volatile private var instance: AppDatabase? = null
val file = File("${Environment.getExternalStorageDirectory()}/appdata/pla/assignment-file/test.db")
Log.d("App Database","Is valid file? - ${file.isFile}") // true
fun getInstance(context Context) = instance ?: synchronized(this) {
instance ?: Room.databaseBuilder(context.applicationContext,AppDatabase::class.java,"MyDb")
.createFromFile(File("path/to/my/test.db"))
.allowMainThreadQueries()
.build().also { instance = it }
}
abstract fun getPlanInfoDao(): PlanInfoDao
}
PlanInfoDao
@Dao
interface PlanInfoDao {
@Query("SELECT * FROM PlanInfo")
fun getPlanInfo(): List<PlanInfo>
}
PlanInfo
@Entity
data class PlanInfo (
@PrimaryKey
@ColumnInfo(name = "Facility_Nbr")
val facilityNbr: String
)
解决方法
@Query("SELECT * FROM PlanInfo")
它返回PlanInfo
将返回类型更改为List<PlanInfo>
@Query("SELECT * FROM PlanInfo")
fun getPlanInfo(): List<PlanInfo>
或者您可能想像下面那样重写查询。
@Query("SELECT * FROM PlanInfo where Lifecycle_ID= :lifeCycleId")
fun getPlanInfo(lifeCycleId: String): PlanInfo
编辑
毫无疑问,您要确保该表中有数据,在获取代码之前尝试成功插入一行。确保它在那里。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。