问题描述
我尝试在我的应用程序中使用 dao 数据库,但当我尝试创建视图模型时出现此错误:
E/libc:访问被拒绝,发现属性“ro.vendor.df.effect.conflict” E/Perf:无法获取文件列表 com.example.kiedyssieuda E/Perf: getFolderSize() : Exception_1 = java.lang.NullPointerException: 尝试获取空数组的长度 E/Perf:无法获取文件列表 com.example.kiedyssieuda getFolderSize() : Exception_1 = java.lang.NullPointerException: 尝试获取空数组的长度
人物类:
@Entity(tableName = "people_table")
data class Person(var name: String,var surname: String ){
@PrimaryKey(autoGenerate = true)
var user_id: Int = 0
}
人道界面
@Dao
interface PeopleDao {
@Insert
fun insert(person: Person)
@Update
fun update(person: Person)
@Delete
fun delete(person: Person)
@Query("SELECT * FROM people_table")
fun getAllPeople(): LiveData<List<Person>>
@Query("DELETE FROM people_table")
fun deleteallRows()
}
PeopleDatabase 抽象类
@Database(entities = [Person::class],version = 1,exportSchema = false)
abstract class PeopleDatabase : RoomDatabase(){
abstract fun peopleDao(): PeopleDao
companion object{
private var instance: PeopleDatabase? =null
fun getInstance(context: Context): PeopleDatabase?{
if (instance==null){
instance = Room.databaseBuilder(
context,PeopleDatabase::class.java,"people_table")
.fallbackToDestructiveMigration()
.build()
}
return instance
}
fun deleteInstanceOfDatabase(){
instance=null
}
}
}
PeopleRepository 类
class PeopleRepository(application: Application) {
private var peopleDao: PeopleDao
init {
val database:PeopleDatabase? = PeopleDatabase
.getInstance(application.applicationContext)
peopleDao = database!!.peopleDao()
}
fun insertPerson (person: Person): Job =
Coroutinescope(dispatchers.IO).launch {
peopleDao.insert(person)
}
fun uptadePerson (person: Person): Job =
Coroutinescope(dispatchers.IO).launch {
peopleDao.update(person)
}
fun deletePerson(person: Person): Job =
Coroutinescope(dispatchers.IO).launch {
peopleDao.delete(person)
}
fun getAllPeopleAsync(): Deferred<LiveData<List<Person>>> =
Coroutinescope(dispatchers.IO).async {
peopleDao.getAllPeople()
}
fun deleteallRows(): Job =
Coroutinescope(dispatchers.IO).launch {
peopleDao.deleteallRows()
}
Peopleviewmodel 类
class Peopleviewmodel(application: Application):
Androidviewmodel(application) {
private var peopleRepository: PeopleRepository =
PeopleRepository(application)
private var allPeople: Deferred<LiveData<List<Person>>> =
peopleRepository.getAllPeopleAsync()
fun insertPerson(person: Person){
peopleRepository.insertPerson(person)
}
fun uptadePerson(person: Person){
peopleRepository.uptadePerson(person)
}
fun deletePerson(person: Person){
peopleRepository.deletePerson(person)
}
fun getAllPeople(): LiveData<List<Person>> = runBlocking {
allPeople.await()
}
fun deleteallRows(){
peopleRepository.deleteallRows()
}
}
主要活动:
class MainActivity : AppCompatActivity() {
private lateinit var viewmodel: Peopleviewmodel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val users = ArrayList<Person>()
//users.add(Person("abc","123"))
viewmodel = viewmodelProvider
.AndroidviewmodelFactory
.getInstance(application)
.create(Peopleviewmodel::class.java)
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)