Модель просмотра:
Код: Выделить всё
@HiltViewModel
class appViewModel @Inject constructor(
private val appDao: appDao
) : ViewModel() {
private val _Count = MutableStateFlow(0)
val Count: StateFlow = _Count.asStateFlow()
init {
viewModelScope.launch {
appDao.getCount()
.collect { count ->
_Count.value = count
}
}
}
}
Код: Выделить всё
@Composable
fun WkTopBar(navController: NavController?) {
val appViewModel: appViewModel = hiltViewModel()
val Count by appViewModel.Count.collectAsState()
Text(text = "count: $Count", color = Color.Black)
}
Код: Выделить всё
@Entity(tableName = "books")
data class Book(
@PrimaryKey(autoGenerate = true) val id: Int = 0,
val title: String,
val body: String,
val isRead: Boolean = false
)
@Dao
interface appDao {
@Insert
suspend fun insertBook(book: Book)
@Query("SELECT COUNT(*) FROM books WHERE isRead = 0")
fun getCount(): Flow
}
Код: Выделить всё
@Module
@InstallIn(SingletonComponent::class)
object DatabaseModule {
@Provides
fun provideAppDatabase(applicationContext: Context): AppDatabase {
return Room.databaseBuilder(
applicationContext,
AppDatabase::class.java,
"book_database"
).build()
}
@Provides
fun provideAppDao(appDatabase: AppDatabase): appDao {
return appDatabase.appDao()
}
@Provides
fun provideContext(app: Application): Context {
return app.applicationContext
}
}
Код: Выделить всё
@Database(entities = [Book::class], version = 1, exportSchema = false)
abstract class AppDatabase : RoomDatabase() {
abstract fun appDao(): appDao
companion object {
@Volatile
private var INSTANCE: AppDatabase? = null
fun getDatabase(context: Context): AppDatabase {
return INSTANCE ?: synchronized(this) {
val instance = Room.databaseBuilder(
context.applicationContext,
AppDatabase::class.java,
"book_database"
).build()
INSTANCE = instance
instance
}
}
}
}
Код: Выделить всё
private fun saveBook(message: RemoteMessage) {
val title = message.book?.title.orEmpty()
val body = message.book?.body.orEmpty()
val book = Book(title = title, body = body)
CoroutineScope(Dispatchers.IO).launch {
try {
val appDao = AppDatabase.getDatabase(applicationContext).appDao()
appDao.insertBook(book)
} catch (e: Exception) {
Log.e(TAG, "Error saving book: ${e.message}")
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... m-database
Мобильная версия