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)
}
}
posted @ 2024-04-07 19:55  Hbro  阅读(25)  评论(0)    收藏  举报