当前位置: 首页 > news >正文

怎样做网站关键字天津网站建设培训

怎样做网站关键字,天津网站建设培训,广州网站建设 骏域,做听书网站怎么做主要还是认知问题#xff0c;Android 官网从一开始就在推ktx#xff0c;现在都已经2. 版本了#xff0c;但是呢#xff0c;因为之前没有从0开始写过一个Kotlin的APP#xff0c;就陷入了一个JAVA 思维#xff0c;在JAVA 中我们知道要做到像协程这么处理不是不能#xff0…主要还是认知问题Android 官网从一开始就在推ktx现在都已经2. 版本了但是呢因为之前没有从0开始写过一个Kotlin的APP就陷入了一个JAVA 思维在JAVA 中我们知道要做到像协程这么处理不是不能只是过于复杂一般水平的人根本驾驭不住恰巧我根本不敢想。也就导致了一个问题ktx 这个界面路过了无数次今天终于看到了TA。 什么痛点 写过界面base 的同学可能有经验如果是说想要在viewModel 创建的时候就开始进行异步进行网络请求除了要处理构造函数传递进来的入参还有要处理viewModel的Factory就是说viewModel想要通过构造函数传参Factory 的重写成自己的但是我们又没法确定后续的viewModel的构造是啥init执行的时候属性变量都还没有赋值所以在init 里面写逻辑就根本行不通就只能在Lifecycle里面写当生命周期到什么时候就主动调用这个viewModel规范好的内容然后通过liveData 和泛型把数据抛给用户层。 上面是理想情况现实情况并不是这个样子的因为有些界面接口请求并不是一个可能是多个请求顺序执行而且每个人都有自己的想法嗯我们通常的认为别人可以理解自己的想法所以base是不写注释所以写了别人不用还说写的垃圾为了更贴合大众实际思路我们可能提供几个函数 fun observe() fun initView(savedInstanceState: Bundle?) fun initData()然后再 initData 里面自己写网络请求。这就很烦人经常搬砖的同学都知道一个界面就一个网络请求是常态但是他不是必然因素每个界面都要自己写initData我写多了也骂自己垃圾为啥不封装一下当然更多的时候是骂包这个玩意的人。 如何解决这个痛点 既然kotlin的扩展函数这么强大能不能自己包装一个什么东西比如我们是通过liveData 进行数据监听我们创建LiveData 的时候就在协程里面请求数据然后发送出去这个时候构造函数也执行完了也不担心init 执行的时候 属性变量没有赋值的问题所以就开整 val pageData getNetLiveData() fun getNetLiveData(): LiveDataString {val live MutableLiveDataString()viewModelScope.launch(Dispatchers.IO) {val params mutableMapOfString, String()params.put(keywords, )val json OkHttpImpl.postSting(这是网络请求地址,params)live.postValue(json)}return live }思路是我们pageData 的对象通过函数getNetLiveData 创建然后在函数getNetLiveData 里面直接创建一个协程 请求网络请求成功了把数据抛出去这只是基础概念我们还可以抽离成泛型抽离一个作用域函数啥的。 ktx 如何解决这个问题 当完成泛型抽离想做作用域抽离的时候灵光一闪这玩意我见过。 val user: LiveDataResult liveData {emit(Result.loading())try {emit(Result.success(fetchUser()))} catch(ioException: Exception) {emit(Result.error(ioException))} }这ktx 已经提供好了好吧。那么就直接用就行。直接在 mvnrepository liveData-ktx 最小版本导入使用即可。 implementation(androidx.lifecycle:lifecycle-livedata-ktx:2.6.2)例如这样 val liveData: LiveDataString liveData(Dispatchers.IO) {val params mutableMapOfString, String()params.put(keywords, )val json OkHttpImpl.postSting(https://..........,params)emit(json) }如何解决刷新 那么如何做到刷新呢我们界面通常是有刷新的对吧我们总不能刷新的时候重新创建 liveData 然后重新设置监听吧。 所以我们需要正确的抽离业务逻辑。我们知道MutableLiveData可以通过setValue 或者post 发送多次消息而LiveData 这个类因为函数是私有的所以说这个玩意并不能被外部调用。我们看下 liveData{} 函数的实现 public fun T liveData(context: CoroutineContext EmptyCoroutineContext,timeoutInMs: Long DEFAULT_TIMEOUT,block: suspend LiveDataScopeT.() - Unit ): LiveDataT CoroutineLiveData(context, timeoutInMs, block)CoroutineLiveData的实现 internal class CoroutineLiveDataT(context: CoroutineContext EmptyCoroutineContext,timeoutInMs: Long DEFAULT_TIMEOUT,block: BlockT ) : MediatorLiveDataT()OK到这里基本就清晰了但是还是贴一下 public class MediatorLiveDataT extends MutableLiveDataT {}所以说liveData{} 这个函数返回的其实是MediatorLiveData 对象如果不熟悉这个玩意但是MediatorLiveData的父类MutableLiveData是熟悉的。 代码看到这里我们需要刷新的逻辑就非常清晰了我们将liveData{} 函数的返回参数 通过as 转化为 MediatorLiveData或MutableLiveData即可。MediatorLiveData是用于监听多个值得变化的用的比较少比如说用于多接口并发请求统一返回比如说类型转化服务器数据模型与本地数据模型不一致的情况再比如说监听界面变化等。我们这里直接就强制转换为 MutableLiveData val livedataKtx liveDataString {emit(luoye) } as MutableLiveDataString在刷新的时候 fun refresh(){livedataKtx.valueluoye }使用KTX 库的好处还是非常明显的比如我们不需要自己写协程切换当然自己扩展函数抽离得好也不是不行。 最后 其实LiveData 要写还是有很多知识点可以写的但是这里只是进行了简单的逻辑的概述吧。我们通过属性变量的创建时机去进行接口请求或者缓存请求那么在一定程度上是要比调用initData 更快的而且这种逻辑非常清晰我们将首次和刷新从逻辑层分离出来这种代码看起来还是非常简洁的。 在这个逻辑上我们可以发现compose 的中的界面数据通过这种方式的刷新反而更加的贴合吧。当然通过Flow,或者channel 等方式 转LiveData 也是一种思路但是在简单的界面请求中感觉没有必要。 Android 学习笔录 Android 性能优化篇https://qr18.cn/FVlo89 Android Framework底层原理篇https://qr18.cn/AQpN4J Android 车载篇https://qr18.cn/F05ZCM Android 逆向安全学习笔记https://qr18.cn/CQ5TcL Android 音视频篇https://qr18.cn/Ei3VPD Jetpack全家桶篇内含Composehttps://qr18.cn/A0gajp OkHttp 源码解析笔记https://qr18.cn/Cw0pBD Kotlin 篇https://qr18.cn/CdjtAF Gradle 篇https://qr18.cn/DzrmMB Flutter 篇https://qr18.cn/DIvKma Android 八大知识体https://qr18.cn/CyxarU Android 核心笔记https://qr21.cn/CaZQLo Android 往年面试题锦https://qr18.cn/CKV8OZ 2023年最新Android 面试题集https://qr18.cn/CgxrRy Android 车载开发岗位面试习题https://qr18.cn/FTlyCJ 音视频面试题锦https://qr18.cn/AcV6Ap
http://www.hkea.cn/news/14444973/

相关文章:

  • 用pyton可以做网站吗天元建设集团有限公司济南第六建筑工程分公司
  • 泉州seo网站建设费用微信h5爆点游戏源码
  • 网站建设售后服务明细新闻最新头条10条
  • 都匀网站建设wordpress 怎么汉化主题
  • 淘宝上那些做网站seo的管用吗江苏建设工程标准网站
  • 文成网站建设重庆交通建设监理协会网站
  • 镇江论坛网站建设搬家公司网站模板
  • 自己做的网页怎么连接到网站关键词点击优化工具
  • 政务网站建设目的_意义wordpress相关知识
  • 鹤山市城乡住房建设部网站物流网站有哪些
  • 贴吧网站建设网站开发项目责任分配矩阵
  • 青岛门户网站建设大连网站开发培训班
  • 广州营销型网站网络营销应具备的技能
  • wordpress图片文件目录下郑州seo教程
  • 企业网站系统设计与实现.电子商务网站建设的核心
  • dedecms口腔医院类网站模板 织梦网站模板专业APP客户端做网站
  • 网站建设 岗位职责 智联虚拟主机与网站建设
  • 网站开发前端要学什么软件重庆市建设信息网站
  • 免费flash网站模板wordpress导航栏字体
  • 墙绘做网站哪家好做网站都需要做什么
  • 宁波宇丰建设有限公司网站2016最新wordpress模板
  • 靖州网站建设重庆seo网络优化师
  • 深圳找个人做网站2021中国建筑企业500强排名
  • 网销都是在那些网站做推广电子商务网站系统规划报告
  • 怎么做网站搜索引擎利于搜索深圳seo优化方案
  • 洛阳做网站那家好房地产新闻稿
  • 河源哪里做网站平面设计师网站都有哪些
  • 什么是营销型企业网站湛江购房网
  • 做营销看的网站沈阳php网站
  • 网站使用特殊字体免费广告投放平台