# Word-Management-App **Repository Path**: blithy/word-management-app ## Basic Information - **Project Name**: Word-Management-App - **Description**: No description available - **Primary Language**: Kotlin - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-11-05 - **Last Updated**: 2024-11-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 单词管理APP ## 项目说明 这是一个简单的单词管理Android应用程序,使用Kotlin语言开发。应用程序允许用户添加、查看和删除单词,所有数据都持久化存储在本地数据库中。 ## 功能特点 1. 单词列表显示 - 使用RecyclerView显示所有已保存的单词 - 所有文字显示为红色 - 支持长按删除功能(带确认对话框) 2. 单词添加 - 独立的添加界面 - 输入验证(不允许空白输入) - 自动保存到数据库 3. 界面特性 - 使用Material Design风格 - 支持Fragment导航 ## 技术实现 1. 架构组件 - Room数据库:实现数据持久化 - 基于SQLite的高级抽象层 - 提供面向对象的数据库访问 - 使用注解简化数据库操作 - 支持编译时SQL验证 - 自动进行对象映射 - 使用Flow实现响应式数据更新 - Navigation:处理Fragment间导航 - ViewBinding:简化视图绑定 - Coroutines:处理异步操作 2. 主要类说明 - `MainActivity`: 应用程序入口,设置导航和工具栏 - `WordListFragment`: 显示单词列表,处理删除操作 - `AddWordFragment`: 处理新单词的添加 - `WordAdapter`: RecyclerView的适配器 - `Word`: 数据实体类 - `WordDatabase`: Room数据库和DAO实现 3. 数据流程 - 数据存储:使用Room数据库 - 数据观察:使用Flow实现实时更新 - 异步操作:使用协程处理数据库操作 ## 项目结构 ## 开发环境 - Android Studio - Kotlin 1.9.0 - Minimum SDK: 26 (Android 8.0) - Target SDK: 34 (Android 14) ## 系统要求 - Android 8.0 (API 26) 或更高版本 ## 数据库实现细节 1. DAO(数据访问对象)实现 - DAO 是什么? - Data Access Object 的缩写 - 用于分离数据访问逻辑和业务逻辑 - 通过接口定义数据库操作方法 - Room 自动生成实现代码 - DAO 的优势 - 代码结构清晰 - 易于测试和维护 - 减少重复代码 - 统一的数据访问接口 - 实现方式 ```kotlin @Dao interface WordDao { // 使用注解定义数据库操作 @Query("SELECT * FROM words") fun getAllWords(): Flow> @Insert suspend fun insert(word: Word) @Delete suspend fun delete(word: Word) } ``` 2. Room 注解说明 - @Dao: 标记这是一个数据访问对象接口 - @Query: 定义SQL查询语句 - @Insert: 简化插入操作 - @Delete: 简化删除操作 - @Database: 定义数据库配置 3. 数据访问流程 - 定义 DAO 接口和方法 - Room 在编译时生成实现类 - 通过 Database 类获取 DAO 实例 - 使用 DAO 方法访问数据库 4. 使用示例 ```kotlin // 在 Fragment 中使用 DAO class WordListFragment : Fragment() { private lateinit var db: WordDatabase override fun onViewCreated(view: View, savedInstanceState: Bundle?) { // 获取数据库实例 db = Room.databaseBuilder( requireContext(), WordDatabase::class.java, "word_database" ).build() // 使用 DAO 获取所有单词 viewLifecycleOwner.lifecycleScope.launch { db.wordDao().getAllWords().collect { words -> // 处理数据 } } } } ``` ## 异步操作实现 1. 什么是异步操作? - 在后台线程执行的操作 - 不阻塞UI线程 - 适用于耗时任务(如数据库操作) - 确保应用响应流畅 2. 协程(Coroutines)实现 ```kotlin class AddWordFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { binding.buttonSave.setOnClickListener { // 启动协程执行数据库操作 viewLifecycleOwner.lifecycleScope.launch { db.wordDao().insert(Word(word = wordText)) // 插入完成后返回上一页 findNavController().navigateUp() } } } } ``` 3. Flow 实现 ```kotlin class WordListFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { // 在协程中收集Flow数据 viewLifecycleOwner.lifecycleScope.launch { // Flow自动监听数据变化 db.wordDao().getAllWords().collect { words -> adapter.submitList(words) } } } } ``` 4. 异步操作的优势 - 避免UI卡顿 - 更好的用户体验 - 安全的数据库操作 - 自动处理生命周期 5. 关键组件说明 - lifecycleScope: 与Fragment生命周期绑定的协程作用域 - launch: 启动新的协程 - suspend: 标记可挂起函数 - Flow: 响应式数据流 - collect: 收集Flow数据 6. 实际应用场景 - 数据库插入操作 ```kotlin // 异步插入数据 suspend fun insert(word: Word) ``` - 数据库查询操作 ```kotlin // 异步查询并返回Flow fun getAllWords(): Flow> ``` - 数据库删除操作 ```kotlin // 异步删除数据 suspend fun delete(word: Word) ```