ViewModel 协程 flow 调用Room和网络数据的方式

【Jetpack】Room + ViewModel + LiveData 综合使用 ( 核心要点说明 ) ViewModel 是一个设计模式,它可以使得应用程序的 UI 和数据逻辑分离,从而更方便地管理数据。创建一个继承于 AndroidViewModel 的 ViewModel 类,并将数据源指向 Room 数据库,同时在 ViewModel 中使用协程进行数据访问操作,以此来确保异步访问 Room 的线程安全。总的来说,Room、ViewModel 和 LiveData 的组合使用可以极大地提升应用程序的性能和可维护性,同时也可以帮助开发者更好地理解和掌握 Android Jetpack 的相关知识。 阅读详情

ViewModel 调用数据的方式

@Query("SELECT * FROM pocketbook WHERE record_type = :type AND create_time >= :createTimeStart AND create_time <= :createTimeEnd ORDER BY id DESC")
fun getPocketbookListNew(type: String, createTimeStart: Long, createTimeEnd: Long): Flow<List<Pocketbook>>

1.升级前

 fun getPockBookListNew(
        type: String,
        createTimeStart: Long,
        createTimeEnd: Long
    ): Flow<List<Pocketbook>> {
        val cities = db.gePockBookDao().getPocketbookListNew(type, createTimeStart, createTimeEnd)
        return cities.catch { e -> e.printStackTrace() }.flowOn(Dispatchers.IO)
    }


2.升级后

ViewModel

 val loadStateOfPockBookList = MutableLiveData<List<Pocketbook>>()
  fun getPockBookListNew1(
        type: String,
        createTimeStart: Long,
        createTimeEnd: Long
    ) = launch {
        val cities = db.gePockBookDao().getPocketbookListNew(type, createTimeStart, createTimeEnd)
        cities.catch { e -> e.printStackTrace() }.flowOn(Dispatchers.IO).collect {
            loadStateOfPockBookList.postValue(it)
        }
    }
    
Activity
noteBookVM.loadStateOfPockBookList.observe {
     mAdapter.setNewData(it)
}

@GET("/marketing/consumer/activities/invite")
suspend fun getInvite(): Response<InviteModel>


val loadStateOfInvite = MutableLiveData<InviteModel>()
fun getInvite1() = launch {
    flow {
         var model= activitiesService.getInvite().data
         emit(model)
    }.flowOn(Dispatchers.IO).catch { e->e.printStackTrace() }.collect {
         loadStateOfInvite.postValue(it)
  }
}
ViewModel中的StateFlow和SharedFlow,使用建议以及单元测试 以读取数据库数据为例,Repository负责从数据库读取相应数据并返回一个flow,在ViewModel收集这个flow中的数据并更新状态(StateFlow),在MVVM模型中,ViewModel中暴露出来的StateFlow应该是UI层中唯一的可信数据来源,注意是唯一,这点跟使用LiveData的时候不同。很简单,将之转换成热流就好了!关于在UI层收集ViewModel层的热流方式,官方文档已经有介绍,但是没有补充在JetPack Compose中的收集流方式,下面补充一下。 阅读详情

相关推荐

从零构建安卓论坛App:MVVM架构、协程与Room数据库实战

在移动应用开发领域,构建一个功能完整、体验流畅的客户端应用是核心技能。其关键在于采用合理的架构模式实现关注点分离,并高效处理数据流与异步任务。MVVM(Model-View-ViewModel)架构是当前Android官方推荐的主流模式,它通过ViewModel管理UI相关数据,并利用LiveData或StateFlow实现数据驱动UI更新,极大地提升了代码的可测试性与可维护性。在实际工程中,网络请求、本地数据持久化与复杂的UI交互是常见挑战。通过集成Retrofit和OkHttp可以构建稳健的网络层,而R

weixin_30653023的博客 441

ViewModel+Flow的绝佳实例和封装

ViewModel+Flow的绝佳实例和封装 0.前言 在最近的Android开发中,主流推送慢慢从Java→Kotlin,LifeData→Flow. 那里面各有各的好处,也都是为了解决不同应用场景给出不同的方案。 但是在使用官方推荐的ViewModel+Flow时,会有很多需要解决的细节,里面也会牵涉到比较多的知识点。所以这个文章就是将自己学习到的东西进行总结. 此文章会涉及到的知识点会比较多包括: kotlin扩展函数 kotlin高阶函数 kotlin内联函数 Flow的使用 1.Flow的简

qq_33902817的博客 3347

深入探索Android开发:Room和Flow的最佳实践指南

Room是一个SQLite对象映射库,它提供了SQLite数据库的抽象层,使得在Android应用中轻松进行数据库操作。通过Room,开发者可以在编译时进行SQL查询的验证,并且能够轻松地将数据库表中的数据转换为Java或Kotlin对象。Flow是Kotlin协程提供的一种基于数据流的异步编程工具,它可以帮助我们处理异步操作、数据流转换和错误处理。在Android开发中,Flow库已经成为了处理异步任务和数据流的重要工具,可以提高代码的可读性和可维护性。

虎哥LoveDroid 1855

【Jetpack】Room + ViewModel + LiveData 综合使用 ( 核心要点说明 | 组合方式 | 代码示例 )

一、Room + ViewModel + LiveData 框架使用核心要点 1、Room 框架优化分析 2、Google 官方建议的 Room + ViewModel + LiveData 架构 3、Room 与 LiveData 结合使用要点 4、Repository 层核心要点 5、ViewModel + Room 结合使用 6、Activity 组件中 ViewModel 使用要点 7、Room 框架主动查询数据库数据需保留除 LiveData 返回值外的正常查询方法 二、完整代码示例 1、buil

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 9059

Jetpack 与 Kotlin 协程:异步编程的完美结合

本文旨在全面解析 Jetpack 组件与 Kotlin 协程的集成方式,帮助 Android 开发者掌握如何利用这一强大组合简化异步编程。我们将覆盖从基础概念到高级用法的完整知识体系,重点分析协程在 Jetpack 各组件中的最佳实践。文章首先介绍核心概念,然后深入分析协程与各 Jetpack 组件的集成方式,接着通过实际案例展示具体实现,最后讨论未来发展趋势和常见问题解答。Jetpack: Google 推出的一套 Android 开发组件集合,旨在简化常见开发任务Kotlin 协程。

移动开发前沿的博客 1276

DataGridView添加新行时在单元格绑定下拉列表DataGridViewComboBoxCell

效果图如下 先在界面上添加DataGridView,添加字段no、type、param 在lord事件中新建一行 dataGridView1.Rows.Add(); 在RowsAdded事件中操作新建的行 private void dataGridView1_RowsAdded_1(object sender, DataGridViewRowsAddedEventArgs...

wuqinglaohao的博客 1986

Android-Jetpack-Demo中的Kotlin语法精髓:空安全、协程与Flow全解析

Android-Jetpack-Demo是一个快速入门Android Jetpack&Compose以及相关Kotlin、MVVM/MVI等独立构架App基础技能的项目,其中Kotlin语法的空安全、协程与Flow是构建高效Android应用的核心要素。 ### 一、空安全:Android开发的防崩基石 在Kotlin中,null与非null是两个平行的类型,如`String`与`String?

gitblog_00232的博客 1077

【数字电源/MATLAB+PLECS】如何进行 Buck 数字电源仿真(二)PLECS 搭建开环 Buck 功率级

本文介绍了如何在PLECS中搭建开环Buck功率级模型,验证数字电源设计的基本思路。重点内容包括: 明确开发顺序:先开环验证功率级,再闭环设计控制器 搭建关键组件:输入电源、PWM模块、MOSFET开关、续流二极管、LC滤波电路及负载 设置初始参数:24V输入、12V输出、200kHz开关频率、22μH电感、100μF电容 测量关键波形:MOSFET Vds验证开关动作、电感电流纹波和输出电压稳态值 提供完整仿真模型和GitHub资源,便于读者复现验证 文章强调通过开环测试先确保功率级正确性,为后续闭环控制

weixin_43234123的博客 1218

Kotlin协程在AAC架构中的实践:ViewModel、Room与Flow的异步编排

在Android应用开发中,异步任务的处理方式直接决定了代码的可读性与稳定性。传统回调嵌套往往让业务逻辑深陷“回调迷宫”,尤其在AAC(Android Architecture Components)架构下,状态管理与生命周期感知虽已规范化,但异步流程的编排仍然是一大痛点。Kotlin协程通过挂起与恢复机制,将异步代码转换为顺序写法,配合结构化并发解决了线程切换、任务取消和异常传播等难题。结合ViewModel、Repository、Room与Flow,开发者可以构建出既清晰又便于维护的数据流链路:view

weixin_27017211的博客 264

【用unity实现100个游戏之18】从零开始制作一个类CSGO/CS2、CF第一人称FPS射击游戏——基础篇1(附项目源码)

生存和射击游戏一直是我的最爱,说起3D最普遍的应该就是射击系统了,你可以在任何情况下加入射击功能,所以我写下了这篇FPS开发记录。希望对你有帮助。在这个项目中,你将学习如何设计和实现射击系统、武器系统、玩家控制、场景设计等方面的内容。通过这个项目,你将深入了解游戏开发中的许多核心概念和技术,并且在实践中不断提升自己。本项目将带你从零开始逐步实现一个完整的第一人称射击游戏,并且会逐步引入一些高级功能,如特效、声音等。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 5499

RK3588开发笔记-Hailo AI模块调试

本文详细介绍了在RK3588开发板上调试HailoAI模块的全过程。首先概述了RK3588处理器的强大性能(4核A76+4核A55,6TOPS算力)和Hailo-8 AI加速模块的特点,重点阐述了通过PCIe接口连接两者的硬件方案。调试步骤包括:确认内核PCIe配置、编译Hailo驱动、下载固件文件并部署到指定目录,最后通过运行resnet模型验证模块性能(实测FPS达2456)。文中提供了完整的软件包下载地址和GitHub源码链接,为开发者实现类似AI加速方案提供了实用参考。

flypig has a dream! 963

Room 与 Flow:本地数据源现代写法

用 Room 的 Entity/DAO/Database 替代裸 SQLite:以 `suspend` 做一次性读写、以 `Flow` 驱动 UI 自动刷新,在 Repository 中与 Retrofit 组合成单一数据源策略。默认 Kotlin 2.x + Room 2.7+ 协程/Flow API

帅次的博客 490

全球建筑物提取数据集(免费下载):微软/GlobalMLBuildingFootprints

这个是GitHub上的开源数据集: https://github.com/microsoft/GlobalMLBuildingFootprints 介绍 必应地图正在世界各地发布开放式建筑足迹。我们从 2014 年到 2021 年间的 Bing Maps 图像中检测到了 7.77 亿座建筑物,包括 Maxar 和 Airbus 的图像。数据可在 ODbL 下免费下载和使用。该数据集补充了我们的其他版本。 包括的地区 执照 此数据由 Microsoft 根据Open Dat..

此星光明博客 6289

Kotlin协程与架构组件整合:ViewModel、LiveData与Flow实战

结构化并发与生命周期感知是异步编程的核心挑战。Kotlin协程通过挂起函数和CoroutineScope,将异步任务的生命周期绑定到组件作用域,实现自动取消与异常传播。在Android架构中,viewModelScope、LiveData构建器与repeatOnLifecycle等机制,确保数据流在安全线程调度下运行,避免回调嵌套与内存泄漏。这些技术广泛应用于网络请求、数据库读写及UI状态管理,尤其适合列表加载、搜索防抖等场景。本文深入拆解协程与ViewModel、LiveData、Flow的整合细节,涵盖

weixin_34396103的博客 641

SAP 系统和银行系统通过 SM2 加密算法进行集成

SM2 是基于椭圆曲线离散对数问题(ECDLP)的一种公钥密码算法。椭圆曲线加密的核心原理,是利用了一个数学难题:在椭圆曲线群上,已知曲线上两点的运算结果,逆向推导出这两个点的具体信息是非常困难的。这样的复杂度使得基于椭圆曲线的密码体制比传统的 RSA 更加难以破解。在 SM2 加密中,公钥和私钥的生成与传统的椭圆曲线加密类似。选择一个椭圆曲线和一个基点 P。使用私钥 d,计算公钥 P’ = d * P。私钥 d 保密,而公钥 P’ 可公开分发,用于加密数据。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1212

Spark Sql 连接mysql

转载请务必注明原创地址为:http://dongkelun.com/2018/03/21/sparkMysql/ 1、基本概念和用法(摘自spark官方文档中文版) Spark SQL 还有一个能够使用 JDBC 从其他数据库读取数据的数据源。当使用 JDBC 访问其它数据库时,应该首选 JdbcRDD。这是因为结果是以数据框(DataFrame)返回的,且这样 Spark SQL操作轻松或便......

主要分享大数据相关的知识,如Spark、Hudi 1万+

理解协程、LiveData 和 Flow机制

从 API 1 开始,处理 Activity 的生命周期 (lifecycle) 就是个老大难的问题,基本上开发者们都看过这两张生命周期流程图: 随着 Fragment 的加入,这个问题也变得更加复杂: 因此,在开发者面对这个挑战时,给出非常稳健的解决方案:分层架构。 如上图所示,通过将应用分为三层,现在只有最上面的 Presentation 层 (以前叫 UI 层) 才知道生命周期的细节,而应用的其他部分则可以安全地忽略掉它。 而在 Presentation 层内部也有进一步的解...

qq_37923705的博客 672

手把手教你学AutoSAR - 总目录

鉴于近期较多博友问及微信群,如下可申请好友验证,请备注“autosar”,否则可能添加不通过。验证通过后,拉入讨论群。PS:本人鉴于工作事项可能不能及时回复问题,可在交流群内部和其他博友之间相互沟通交流经验。欢迎来到桃源乐游的《AutoSAR配置与实践》,以下为学习大纲,蓝色字体点击可跳转。

nihaoljq2010的博客 7459

DisneyMotions进阶开发:Flow数据流与协程的高级应用

DisneyMotions是一个基于MVVM架构的迪士尼主题应用,采用Kotlin语言开发,融合了Coroutines(协程)和Flow数据流等现代Android技术,为用户提供流畅的动画和响应式体验。本文将深入探讨该项目中Flow与协程的高级应用技巧,帮助开发者掌握异步数据处理的核心要点。 ## 协程与Flow在项目中的架构定位 在DisneyMotions项目中,协程与Flow构成了数据层

gitblog_00952的博客 799

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

大型Android项目架构:基于组件化+模块化+Kotlin+协程+Flow+Retrofit+Jetpack+MVVM架构实现WanAndroid客户端

前言:苟有恒,何必三更眠五更起;最无益,莫过一日曝十日寒。项目采用 Kotlin 语言,Android Jetpack,组件化,模块化拆分,加入短视频功能,Flow冷流的使...

https://juejin.cn/user/1654096907477549/posts 5273

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Kotlin协程与Jetpack架构组件深度整合实战

结构化并发是一种通过父子协程层级关系自动管理任务生命周期的并发模型,其核心原理是父协程等待所有子协程完成、取消父协程自动取消全部子协程,从而避免手动管理取消逻辑导致的内存泄漏。在Android开发中,ViewModel、Lifecycle、Room等Jetpack架构组件为结构化并发提供了天然的落地载体,viewModelScope和lifecycleScope等扩展属性将协程作用域与组件生命周期自动绑定,使异步任务的取消变得安全且无需手动干预。结合Flow数据流与Room的挂起函数支持,开发者可以在Vie

weixin_34198453的博客 264

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【Jetpack Compose进阶学与练】第7课:Room本地数据库基础

本课介绍使用Room框架实现推荐系统数据持久化。通过Entity、Dao、Database三要素构建本地数据库,Dao返回Flow实现数据实时监听,配合Repository解耦数据访问,ViewModel通过协程异步操作,Compose通过collectAsStateWithLifecycle实时渲染列表。强调避免主线程操作、正确配置kapt插件、数据库应在Application层单例初始化,确保数据持久与UI同步。

jackchuanqi的博客 403

Android-Jetpack-Demo中的MVVM架构实践:数据驱动UI的完美实现

Android-Jetpack-Demo是一个专注于快速入门Android Jetpack&Compose以及相关Kotlin、MVVM/MVI等独立架构App基础技能的项目。本文将深入探讨该项目中MVVM架构的实践应用,展示如何通过数据驱动UI实现高效开发。 ## MVVM架构概述:为什么它是现代Android开发的首选 MVVM(Model-View-ViewModel)架构模式在Andr

gitblog_00880的博客 897

协程 Flow 最佳实践 | 基于 Android 开发者峰会应用

本文介绍了我们在开发 2019 Android 开发者峰会 (ADS) 应用时总结整理的 Flow 最佳实践 (应用源码已开源),我们将和大家共同探讨应用中的每个层级将如何处理数据流。A...

程序亦非猿——一个能帮你进大厂的男人 378

Jetpack三件套组合实践:ViewModel、Room与Lifecycle从原理到落地

在Android应用开发中,界面状态丢失与生命周期管理一直是长期困扰开发者的核心痛点。ViewModel负责在屏幕旋转等配置变更时保留界面数据,Room基于SQLite提供编译期安全的持久化方案,而Lifecycle则让数据收集与界面可见性精准同步。三者协同构建出一条从数据库到UI的完整数据链路,确保数据可靠落地、状态按需推送。这套组合不仅能大幅减少Activity代码量,还能有效避免内存泄漏和后台资源浪费。无论是简单的待办清单,还是复杂的业务型App,掌握ViewModel与Room的配合方式、理解Lif

weixin_29009971的博客 335
上一篇: 关于android:Kotlin中的枚举注释类型
下一篇: Data Mapper
黄毛火烧雪下
黄毛火烧雪下 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄14年 7714粉丝 439原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄毛火烧雪下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值