2024/4/7
跟着教程写todoapplication:
room创建本地数据库:
package com.example.to_do_application.data
import android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
import androidx.room.TypeConverters
import com.example.to_do_application.data.models.ToDoData
@Database(entities = [ToDoData::class], version = 1, exportSchema = false)
@TypeConverters(Converter::class)
abstract class ToDoDatabase: RoomDatabase() {
abstract fun toDoDao(): ToDoDao
companion object{
@Volatile
private var INSTANCE: ToDoDatabase? = null
fun getDatabase(context: Context): ToDoDatabase{
val tempInstance = INSTANCE
if(tempInstance != null){
return tempInstance
}
synchronized(this){
val instance = Room.databaseBuilder(
context.applicationContext,
ToDoDatabase::class.java,
"todo_database"
).build()
INSTANCE = instance
return instance
}
}
}
}
package com.example.to_do_application.data
import androidx.lifecycle.LiveData
import androidx.room.*
import com.example.to_do_application.data.models.ToDoData
@Dao
interface ToDoDao {
@Query("SELECT * FROM todo_table ORDER BY id ASC")
fun getAllData(): LiveData<List<ToDoData>>
@Insert(onConflict = OnConflictStrategy.IGNORE)
suspend fun insertData(toDoData: ToDoData)
@Update
suspend fun updateData(toDoData: ToDoData)
@Delete
suspend fun deleteItem(toDoData: ToDoData)
@Query("DELETE FROM todo_table")
suspend fun deleteAll()
@Query("SELECT * FROM todo_table WHERE tile LIKE :searchQuery")
fun searchDatabase(searchQuery: String): LiveData<List<ToDoData>>
@Query("SELECT * FROM todo_table ORDER BY CASE WHEN priority LIKE 'H%' THEN 1 WHEN priority LIKE 'M%' THEN 2 WHEN priority LIKE 'L%' THEN 3 END")
fun sortByHighPriority(): LiveData<List<ToDoData>>
@Query("SELECT * FROM todo_table ORDER BY CASE WHEN priority LIKE 'L%' THEN 1 WHEN priority LIKE 'M%' THEN 2 WHEN priority LIKE 'H%' THEN 3 END")
fun sortByLowPriority(): LiveData<List<ToDoData>>
}
package com.example.to_do_application.data
import androidx.room.TypeConverter
import com.example.to_do_application.data.models.Priority
class Converter {
@TypeConverter
fun fromPriority(priority: Priority): String{
return priority.name
}
@TypeConverter
fun toPriority(priority: String): Priority {
return Priority.valueOf(priority)
}
}
package com.example.to_do_application.data.viewmodel
import android.app.Application
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.LiveData
import androidx.lifecycle.viewModelScope
import com.example.to_do_application.data.ToDoDatabase
import com.example.to_do_application.data.models.ToDoData
import com.example.to_do_application.data.respository.ToDoRepository
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
class ToDoViewModel(application: Application): AndroidViewModel(application) {
private val toDoDao = ToDoDatabase.getDatabase(application).toDoDao()
private val repository: ToDoRepository
val getAllData: LiveData<List<ToDoData>>
val sortByHighPriority: LiveData<List<ToDoData>>
val sortByLowPriority: LiveData<List<ToDoData>>
init {
repository = ToDoRepository(toDoDao)
getAllData = repository.getAllData
sortByHighPriority = repository.sortByHighPriority
sortByLowPriority = repository.sortByLowhPriority
}
fun insertData(toDoData: ToDoData){
viewModelScope.launch(Dispatchers.IO){
repository.insertData(toDoData)
}
}
fun updateData(toDoData: ToDoData){
viewModelScope.launch(Dispatchers.IO){
repository.updateData(toDoData)
}
}
fun deleteData(toDoData: ToDoData){
viewModelScope.launch(Dispatchers.IO){
repository.deleteItem(toDoData)
}
}
fun deletaAll(){
viewModelScope.launch(Dispatchers.IO){
repository.deleteAll()
}
}
fun searchDatabase(searchQuery: String): LiveData<List<ToDoData>>{
return repository.searchDatabase(searchQuery)
}
}

浙公网安备 33010602011771号