微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

createFromFile不填充数据库-Room MainActivity AppDatabase PlanInfoDao PlanInfo

如何解决createFromFile不填充数据库-Room MainActivity AppDatabase PlanInfoDao PlanInfo

编辑:09/30

由于@shb,我确定createFromFile()不能按预期正确地填充数据库

如果任何人都可以指出我做错了/错过的事情,那就太好了!请参考下图以获取有关数据库结构的参考。预先感谢!

enter image description here

enter image description here

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 举报,一经查实,本站将立刻删除。