I try to use dao database in my app and I get this error when i try to create a view model:
E/libc: Access denied finding property "ro.vendor.df.effect.conflict" E/Perf: Fail to get file list com.example.kiedyssieuda E/Perf: getFolderSize() : Exception_1 = java.lang.NullPointerException: Attempt to get length of null array E/Perf: Fail to get file list com.example.kiedyssieuda getFolderSize() : Exception_1 = java.lang.NullPointerException: Attempt to get length of null array
Person class:
@Entity(tableName = "people_table")
data class Person(var name: String,
var surname: String ){
@PrimaryKey(autoGenerate = true)
var user_id: Int = 0
}
PeopleDao interface
@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 abstract class
@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
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
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()
}
}
MainActivity:
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)
}
}