问题描述
编辑: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
编辑
毫无疑问,您要确保该表中有数据,在获取代码之前尝试成功插入一行。确保它在那里。