首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kotlin + 协程 + Retrofit + MVVM优雅的实现网络请求

前言 最近一直闭关修炼Kotlin,说实话真香真好用,刚好公司准备交给我一个新项目,于是打算直接用Kotlin来构建项目。刚好整体架构搭建完毕了,于是把网络请求这一部分先分享给大家。...这次使用到的是 协程+ retrofit +mvvm的模式,我这儿直接用一个简单的demo来看一下具体的实现方式吧。...:converter-gson:2.4.0' implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter...:0.9.2' 实现思路 不管设计模式这些,先来一个简单的网络请求,就retrofit的基本实现,看看需要哪些步骤 1.创建retrofit ~~~ val retrofit = Retrofit.Builder...的简单请求方式,实际项目中基本上都会封装之后再使用,也为了提高代码的可读性,降低各部分的耦合性, 通俗点来说,只有各司其职才能把工作干好嘛,接下来咱们就围绕着各司其职来一个一个实现 协程实现 接下来把上面的请求换成协程的方式来实现

5.3K60
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android开发:使用Kotlin+协程+自定义注解+Retrofit的网络框架

    对项目的基本介绍 1.整个框架主要是给MVVM框架使用的,自己写完interface接口后,通过自定义的注解就能自动生成接口方法 2.用Kotlin的Flow去代替Rxjava,因为我发现RxJava功能很强大...,但是大家都只是在Http层面使用了一下,既然要用Kotlin里面就已经有Flow,那我还不如少添加一个库 3.通过jetpack的Room数据库实现网络请求的存储,缓存策略也用过注解去完成。...--------- 我们从最简单的AutoApi做引子,开始介绍整个注解框架 只要你的接口类方法中使用了这个注解,就会生成suspend方法,非常的简单 接着我们来看看他是怎么实现的 [1240] [1240...] 看一下这个注解是怎么定义的 注解是支持有默认值的,因为kotlin的方法是可以在变量中直接赋初值的,这样调用就不用传值了,所以这里也做一个支持,让调用时候更加简洁 [1240] 生成的流程 [1240...,去找到对应的缓存策略发起Http请求的方法,很简单看一看就好 [1240] 代码的分析 通过上面分析我们可以知道,你新写一个注解,其实就只需要编写两个类就好了 一个继承 RepositoryMethod

    1.3K50

    Kotlin 简单优雅的高阶函数Kotlin 简单优雅的高阶函数《Kotlin极简教程》正式上架:1 . Kotlin 函数式编程: 函数的组合。一切皆是函数。2. 简单好用的 Kotlin 类型别名

    Kotlin 简单优雅的高阶函数 非常感谢您亲爱的读者,大家请多支持!!!有任何问题,欢迎随时与我交流~ ---- 函数代表一种关系 f 的蕴涵逻辑流。...整个的图G就是一幅美妙的抽象逻辑之塔的 映射图 。 ? image.png 1 . Kotlin 函数式编程: 函数的组合。一切皆是函数。...// 简单直接的函数定义 fun f(x: Int) = x % 2 !...简单好用的 Kotlin 类型别名 typealias G=(String) -> Int typealias F=(Int) -> Boolean typealias H=(String) -> Boolean...简单优雅的高阶函数定义(复合函数): compose(f, g) = f(g(*)) 组合函数返回传递给它的两个函数的组合: (f、g) = f (g (*))。

    98230

    优雅实现网络请求:协程+Flow+Retrofit+OkHttp

    一、Kotlin协程与Flow Kotlin协程是Kotlin提供的一种轻量级线程管理方式。它可以让我们用同步的方式写异步代码,使得代码更加简洁、易读。...使用协程和Flow,我们可以将网络请求抽象为一个数据流,用一个简单的函数来描述网络请求的过程。 1.1 Flow的用法 Flow是Kotlin提供的一种响应式流处理库,用于处理异步、时间相关的操作。...Retrofit内部就是使用OkHttp来实现网络请求的。 2.1 Retrofit的用法 Retrofit是一个类型安全的网络请求库,用于将HTTP API转换为Kotlin或Java接口。...2.3 示例代码 以下是一个使用Retrofit实现的简单示例: import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory...四、总结 使用协程+Flow+Retrofit+OkHttp,我们可以优雅地实现网络请求。我们可以将网络请求抽象为一个数据流,并用一个简单的函数来描述网络请求的过程。

    19510

    Kotlin入门(22)适配器的简单优化

    、简单适配器SimpleAdapter、基本适配器BaseAdapter、翻页适配器PagerAdapter。...到了列表视图ListView这里,与之搭档的一般是基本适配器BaseAdapter,这个BaseAdapter更不简单,基于它的列表适配器得重写好几个方法,还有那个想让初学者撞墙的ViewHolder。...如果用Kotlin实现这个适配器类会是怎样的呢?...、getItem、getItemId这三个函数,仅仅返回简单运算的数值,可以直接用等号取代大括号; 3、对于视图持有者的内部控件,在变量名称前面添加lateinit,表示该属性为延迟初始化属性;...至此基于BaseAdapter的Kotlin列表适配器告一段落,上述的适配器代码模版,同时适用于列表视图ListView与网格视图GridView。 点此查看Kotlin入门教程的完整目录

    1.4K10

    Gradle 构建工具 #5 又冲突了!如何理解依赖冲突与版本决议?

    ,我这里总结了一些比较实用的使用方式: 静态版本(精确版本): 最简单的方式,例如 1.1 区间版本: 使用 () 或 [] 定义开闭区间,例如 [1.0,) 表示高于 1.0 版本 前缀版本: 通过...那么,我们说的依赖冲突到底是怎么发生的呢? ---- 2. 依赖冲突是怎么发生的? 2.1 什么是依赖传递? 用最简单的话说,A 依赖 B,B 依赖 C,那么 A 也会依赖 C,这就是依赖传递。...:kotlin-stdlib-jdk8:1.5.31 -> 1.7.20 (*) | | \--- org.jetbrains.kotlin:kotlin-stdlib-common...:kotlin-stdlib-jdk8:1.5.31 -> 1.7.20 (*) | | | \--- org.jetbrains.kotlin:kotlin-stdlib-common...:kotlin-stdlib-jdk8:1.5.31 -> 1.7.20 (*) | | | \--- org.jetbrains.kotlin:kotlin-stdlib-common

    74930

    Android开发笔记:Retrofit + OkHttp3 + coroutines + LiveData打造一款网络请求框架

    请求 当然这个请求不单单是发送请求这么简单,它包括请求相关的一系列配置是否简易、发送模式是否灵活切换、请求头信息是否易处理、请求参数是否易操作等等 响应 一个好的网络请求框架肯定需要提高我们的生产力,保证我们程序的健壮性...负责的功能场景方便切换,大家开始结合了RxJava, 这一操作直接将Retrofit + OkHttp3 + RxJava 组合的网络框架推上了热门写法, 现状 kotlin 的出现是Google 对于...Android开发的重新定义,含糊不清的态度,既不丢弃Java又宣布kotlin 是首选语言。...在次基础上结合jetpack框架,成了新时代开发的另一条选择路径,从始至终Google 没有对Android推出过官方的设计模式,大家都是从高内聚、低耦合等方面推行着自己的设计模式,让开发简单、维护简单...,在这里也是将要结合其他框架来完成网络框架的设计 coroutines kotlin较Java的最大变化就是kotlin推出的coroutines (协程),协程完全可以替代RxJava, Thread

    2.3K30

    Kotlin + buildSrc:更好的管理Gadle依赖!

    管理Gradle依赖的三种不同方法: 手动管理 使用Google推荐的“ext” Kotlin + buildSrc 1、手动管理 这是一种大多数人在采用的管理依赖的方法,但每次升级依赖库时都需要做大量的手动更改... libs.retrofit_rxjava_adapter implementation libs.rxjava 这种方法是手动管理的一大进步,但是缺少IDE的支持,更准确的说是在更新依赖库的时候IDE...Kotlin + buildSrc == Android Studio Autocomplete 您需要在您的项目里创建一个buildSrc模块,然后编写kotlin代码来管理依赖库,使得IDE支持自动补全...你只需要在buildSrc module中新建两个文件: build.gradle.kts 编写Kotlin代码的文件 (本文中是指Dependencies.kt) buildSrc/build.gradle.kts... Libs.retrofit_rxjava_adapter implementation Libs.rxjava 结束语 我强烈推荐您使用“Kotlin + buildSrc”的方法。

    2.6K10

    轻量级kotlin + Mvp + Rxjava + Retrofit框架

    大家好,又见面了,我是你们的朋友全栈君。 适合团队的框架才是好的框架 1.项目简介 本项目是基于kotlin + Mvp + Rxjava + Retrofit 封装的轻量级模板项目。...+Dagger+组件化 Kotlin+Mvp+Rxjava+Retrofit 使用方便,还有一键生成工具,冗余代码过多,不适合快速开发 使用方便,适合快速开发以及新手...这个简单框架只是一个基础框架,其实没有和别的框架做比较的必要性, 但是之前用过一段时间MvpArms,也从中学到了很多东西,但是并不是所有公司项目都是大项目,可能会面临 快速开发的需求,所有MvpArms...适合团队的框架才是好的框架 5.技术要点 主要使用的第三方开源框架有: RxJava RxAndroid Retrofit Glide Logger SmartRefreshLayout 6.后续更新...加入Dagger2,过多冗余代码用标签代替 开放一键生成contract – model – presenter 工具 7.简单效果图 项目功能较为简单,只是一个简单的图片展示,目前项目封装了以下点位:

    49260

    手把手教你搭建android模块化项目框架(一)选择篇

    经典框架选取总模式:mvvm-databinding图片加载:glide事件总线:kotlin.flow或eventbus,本篇选用kotlin.flow撸出自己的事件总线线程调度:kotlin.CoroutineScope...网络请求:retrofit + kotlin.flow权限请求:后续文章教大家撸出自己的权限工具数据库:room分页库:paging下载工具:aira or okdownloadjson解析:Gson图片压缩...:luban模块化路由:arouter or WMRouter ,本篇为了让大家更加理解模块化路由工作方式,因此会使用path简单封装一个自己的router。...: "com.squareup.retrofit2:adapter-rxjava2:2.6.4", retrofit : "com.squareup.retrofit2...:retrofit:2.6.4", converter_gson : "com.squareup.retrofit2:converter-gson:2.6.4",

    68921

    与小清新的距离 你只差一个RxKotlin !

    这种编程习惯带给大家的是掌握一门语言的风格,就可以快速简单的使用另一们语言的魔力,相信这也是未来10年的发展趋势。...RxKotlin RxKotlin是基于kotlin扩展的rx衍生体,对kotlin无需再普及,这种支持Lambdas语法的简洁姿势,会让代码变得小清新和灵活。可能你已经在java8上体验了一番。...开发者可以用Kotlin将Rxjava变得更加简单,接下来用2.x 先睹为快!...data class 是用来声明一个class的,好比c中def,js中var申明变量对象一样。 SearchService :用过retrofit的也很明白,定义的一个抽象API接口。...通过这个简单的栗子,发现不管用rxJava, 还是只用retrofit, 通过使用rxkotlin将业务流程变得更加清晰,那么kotlin是否也有他的操作符,当然他也有过滤器,转换器,拆分符和rxjava

    93810

    Google 推荐在 MVVM 架构中使用 Kotlin Flow

    是 Paging3 当中重要成员 ) 使用 Data Mapper 分离数据源 和 UI Kotlin Flow 结合 Retrofit2 + Room 的混合使用 Kotlin Flow 与 LiveData...Kotlin Flow 如何与 Retrofit2 + Room 混合使用?...: Flow 支持线程切换、背压 Flow 入门的门槛很低,没有那么多傻傻分不清楚的操作符 简单的数据转换与操作符,如 map 等等 Flow 是对 Kotlin 协程的扩展,让我们可以像运行同步代码一样运行异步代码...Flow 是协程的扩展,如果要在 Room 和 Retrofit 中使用,Room 和 Retrofit 需要支持协程才可以,在 Retrofit >= 2.6.0 和 Room >= 2.1 版本都支持协程...Kotlin Flow 在 Repositories 中的使用 如果我们想在 Flow 中使用 Retrofit 或者 Room 进行网络请求或者查询数据库的操作,我们需要将使用 suspend 修饰符的操作放到

    4.5K21

    Android快速转战Kotlin教程

    :$kotlin_version" 2、Demo说明 该项目使用MVP模式,里面用到了Retrofit2+RxJava2,然后使用了聚合的万年历接口,Demo非常简单便于初学者快速掌握。...4、Retrofit+RxJava Retrofit结合RxJava能快捷的使用网络请求。...本书很多地方都会结合Java字节码进行深入解读,比如对Kotlin扩展的解读,对Kotlin主、次构造器的解读,这种解读目的不止于教会读者简单地掌握Kotlin的用法,而是力求让读者深入理解Kotlin...Kotlin的这些特性和实现机制,可以帮助开发者扫清开发道路上的一些障碍,让开发变得更加简单!本书是一本值得拥有,能切实帮助读者加薪提职的好书!...介绍:一个用Kotlin写的简单漫画APP。

    2.8K22

    使用Kotlin做一个简单的HTML构造器

    最近在学习Kotlin,看到了Kotlin Koans上面有一个HTML构造器的例子很有趣。今天来为大家介绍一下。...这里属性和子标签都声明为了MutableList类型,它是Kotlin类库中的可变列表,存储内容是可以修改的。最后的文本类非常简单,直接返回文本。...我们还需要针对HTML实现一些具体的类。这些类非常简单,继承Tag类即可。这些类里面有一个类比较特殊,它就是TableElement。这个类同时是Thead和Tbody的父类。它的作用在下面会提到。...set函数更简单了,直接使用参数给定的名称和值设定标签的属性,返回值也是标签以便链式调用。这两个工具方法这么写的原因,等到我们完成了这个例子,实际显示效果的时候就可以看到了。...可以看到这里的语法非常奇怪,甚至都不像代码,但是它确确实实是标准的Kotlin代码。

    65620

    Kotlin 中的网络请求代理设置最佳实践

    IP 隐藏:代理服务器可以隐藏客户端的真实 IP 地址。 在 Kotlin 中设置代理 1. 添加依赖 首先,确保你的项目中包含了 OkHttp 库。...示例代码 以下是如何在 Kotlin 中使用 OkHttp 设置代理并发送网络请求的示例代码: kotlin import okhttp3.* import java.net.InetSocketAddress...集成 OkHttpClient 如果你的项目中使用了 Retrofit 来进行网络请求,你可以将配置了代理的 OkHttpClient 实例传递给 Retrofit 的构建器。...import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory val retrofit = Retrofit.Builder...client(client) .addConverterFactory(GsonConverterFactory.create()) .build() 结论 通过本文,你应该了解了如何在 Kotlin

    19110

    Kotlin 中的网络请求代理设置最佳实践

    在 Kotlin 中,使用 OkHttp 库可以方便地设置代理并发送网络请求。本文将介绍如何在 Kotlin 中设置带有认证信息的 HTTP 代理,并提供示例代码。...IP 隐藏:代理服务器可以隐藏客户端的真实 IP 地址。在 Kotlin 中设置代理1. 添加依赖首先,确保你的项目中包含了 OkHttp 库。...示例代码以下是如何在 Kotlin 中使用 OkHttp 设置代理并发送网络请求的示例代码:kotlinimport okhttp3....集成 OkHttpClient如果你的项目中使用了 Retrofit 来进行网络请求,你可以将配置了代理的 OkHttpClient 实例传递给 Retrofit 的构建器。...import retrofit2.Retrofitimport retrofit2.converter.gson.GsonConverterFactoryval retrofit = Retrofit.Builder

    17110
    领券