【Android】OkHttp+Retrofit+Flow的简单使用

这篇具有很好参考价值的文章主要介绍了【Android】OkHttp+Retrofit+Flow的简单使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需求

实现一个简单的登录功能

实现

引入依赖
    //okhttp
    implementation 'com.squareup.okhttp3:okhttp:4.9.3'
    //retrofit
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.4.0'

我们现在有这样一个Body 请求参数

{
   "name": "001"
}

当使用post请求之后,获取返回的数据

{
    "flag": "true"
}

当允许登录的话,这个值就是true

我们先创建两个数据Bean类

data class LoginBean(
    /**
     * 员工工号
     */
    val name: String
)

data class LoginReturnBean(
    /**
    * 返回数据解析
    */
    val flag: String
)

然后我们再创建一个密封类处理返回结果的分类

sealed class LoginResult<out T> {

    data class LoginSuccess<out T>(val data: T) : LoginResult<T>()
    
    data class LoginFail(val error: Throwable) : LoginResult<Nothing>()
}

我们再创建一个Retrofit+OkHttp的单例类

object RetrofitClient {

    private var retrofit: Retrofit? = null

    private const val BASE_URL = "http://"

    private fun getOkHttpClient(): OkHttpClient {
        val builder = OkHttpClient.Builder()
            .addInterceptor(LogInterceptor())
            .connectTimeout(60, TimeUnit.SECONDS)
            .readTimeout(60, TimeUnit.SECONDS)
            .writeTimeout(60, TimeUnit.SECONDS)
            .retryOnConnectionFailure(true)// 错误重连
        return builder.build()
    }

    private fun getRetrofit(ipStr: String): Retrofit {
        if (retrofit == null) {
            retrofit = Retrofit.Builder()
                .baseUrl(BASE_URL + ipStr)
                .client(getOkHttpClient())
                .addConverterFactory(GsonConverterFactory.create())
                .build()
        }
        return retrofit!!
    }

    fun service(ipStr: String): ApiService {
        return getRetrofit(ipStr).create(ApiService::class.java)
    }
}

好了,接下来再创建一个API 接口

interface ApiService {

    @Headers("Content-Type: application/json;charset=utf-8")
    @POST("/login")
    suspend fun postLogin(
        @Body loginName: RequestBody
    ): Response<LoginReturnBean>

}

接下来我们使用Flow来请求

    private fun flowLogin(name: String): Flow<LoginResult<LoginReturnBean>> = flow {
        val gson = Gson().toJson(LoginBean(name))
        val requestBody = gson
            .toRequestBody("application/json; Accept: application/json".toMediaTypeOrNull())
        val postLoginResult =
            RetrofitClient.service("192.168.1.10:9999")
                .postLogin(requestBody)
        if (postLoginResult.isSuccessful) {
            val loginResult: LoginReturnBean = postLoginResult.body()!!
            emit(LoginResult.LoginSuccess(loginResult))
        } else {
            val errorLoginResult = postLoginResult.errorBody()
            emit(LoginResult.LoginFail(IOException(errorLoginResult?.string())))
        }
    }.catch { exception ->
        emit(LoginResult.LoginFail(exception))
    }.flowOn(Dispatchers.IO)

好了,接下来就是调用了

  fun login(name: String, dataResult: IDataResult<String>) {
        viewModelScope.launch {
            dataResult.start()
            flowLogin(name).collect { result ->
                if (result is LoginResult.LoginSuccess) {
                    val data = result.data
                    if (data.flag == "true") {
                        dataResult.success("登录成功")
                    } else {
                        dataResult.fail("登录失败")
                    }
                } else {
                    dataResult.fail("登录失败")
                }
            }
        }
    }

怎么样,是不是感觉跟Retrofit+Okhttp+Rxjava实现起来有点像,又有点不像…文章来源地址https://www.toymoban.com/news/detail-531164.html

到了这里,关于【Android】OkHttp+Retrofit+Flow的简单使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android Retrofit 高级使用与原理

    在 Android 开发中,网络请求是一个极为关键的部分。Retrofit 作为一个强大的网络请求库,能够简化开发流程,提供高效的网络请求能力。本文将深入介绍 Retrofit 的高级使用与原理,帮助读者更全面地理解和应用这一库。 Retrofit 是一个建立在 OkHttp 基础之上的网络请求库,能够

    2024年02月10日
    浏览(31)
  • Android笔记(十八):面向Compose组件结合Retrofit2和Rxjava3实现网络访问

    Square公司推出的Retrofit2库(https://square.github.io/retrofit/),改变了网络访问的方式。它实现了网络请求的封装。Retrofit库采用回调处理方式,使得通过接口提交请求和相应的参数的配置,就可以获得对应的响应,并可以将响应获得的数据解析成特定的数据格式,例如将JSON数据解

    2024年02月02日
    浏览(31)
  • Android 使用okhttp监控网络数据

    这里使用Okhttp写了一个demo来监听网络请求过程中的一系列数据,包括当前网络类型、请求体、响应体大小,url,请求方式,当然还有本次核心获取域名解析时长,建立连接时长,保持连接时长,请求总时长这些数据。 一次网络请求经历了哪些过程 通过域名访问的方式来请求

    2024年02月11日
    浏览(35)
  • Android OKhttp使用(下载和上传文件)

    首先在build.gradle中引入okhttp 下面是demo(用okthttp下载网络上的资源) 用okthttp将资源上传至网络

    2024年02月11日
    浏览(39)
  • Android Okhttp3添加https自签名证书以及Glide4,Android高级工程师进阶学习—Android热修复原理

    二、自签名证书 什么是自签名证书(self-signed certicates)? 自签名证书就是没有通过受信任的证书颁发机构, 自己给自己颁发的证书. SSL 证书大致分三类: 由安卓认可的证书颁发机构CA(Certificate Authority)(如: VeriSign、DigiCert), 或这些机构的下属机构颁发的证书. 没有得到安卓认可的

    2024年04月17日
    浏览(29)
  • Android之网络请求2————OkHttp的基本使用

    1.概述 okhttp是一个第三方库,用于Android中网络请求 这是一个开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso和LeakCanary) 。用于替代HttpUrlConnection和Apache HttpClient(android API23 里已移除HttpClient)。 2.OkHttp于http的请求 我们先构造一个一个http请

    2024年02月01日
    浏览(38)
  • android开发使用OkHttp自带的WebSocket实现IM功能

    目录 一、背景 二、在项目中添加依赖包 三、框架调用 1、配置OkHttpClient  2、调用Url,构建WebSocket请求 3、建立连接 4、使用WebSocket对象发送消息     android app开发经常会有IM需求,很多新手不晓得如何入手,难点在于通讯不中断。其实android发展到今天,很多技术都很完善,有

    2024年02月08日
    浏览(33)
  • Android Retrofit 源码解析

    在 Android 开发中,Retrofit 是一个非常流行的网络请求库。它是由 Square 开发的,用于 简化 Android 应用程序与网络服务器之间的通信 。 Retrofit 主要用于处理 RESTful API 的网络请求。它通过将 HTTP 请求与 Java 接口方法进行映射,使得网络请求的编写变得简单和直观。使用 Retrofit,

    2024年02月13日
    浏览(28)
  • Android Retrofit 源码分析

    Retrofit 是一个 RESTful 的 HTTP 网络请求框架的封装。 网络请求的工作本质上是 OkHttp 完成,而 Retrofit 仅负责 网络请求接口的封装。 1)App应用程序通过 Retrofit 请求网络,实际上是使用 Retrofit 接口层封装请求 参数、Header、Url 等信息,之后由 OkHttp 完成后续的请求操作。 2)在服

    2024年02月13日
    浏览(23)
  • Android中okhttp的websocket的详细使用方法(加断线重连)

    介绍之类的就不多讲了,懒得讲也未必有别人整理的清晰,直接上代码 使用:

    2024年02月15日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包