首页 > 其他分享 >Android中Retrofit的学习和使用记录

Android中Retrofit的学习和使用记录

时间:2024-07-21 14:00:20浏览次数:16  
标签:String val 记录 age Api Android Retrofit name

目录

一 概述

是Android一个restful风格的网络请求框架,本质上还是OkHttp进行请求,Retrofit负责对接口的封装。 Retrofit 接口层封装请求参数、Header、Url 等信息。

二 优点

我们先看OkHttp的缺点,
1)接口配置繁琐,尤其是需要配置body、header、参数等时候
2)需要手动对拿到的responseBody进行解析,不好复用
3)没自动线程切换
Retrofit的优点就是对上面的缺点进行了优化。

三 代码

注意BaseUrl要以/结尾,不然会报错。
这里是一个get请求示例。
网址是${BASE_URL}test?name = " "&age = “”

3.1 Api

对请求网址参数进行封装

interface Api {
    @GET("test")
    suspend fun getUser(
        @Query("name") name: String,
        @Query("age") age: String
    ):ApiResponse<List<User>>
}

bean类User

data class User(
val name: String = "",
val age: String = ""
)

Response封装

data class ApiResponse<T>(
    val code: String,
    val data: T
)

3.2 RetrofitManager

创建OkHttpClient实例,创建Retrofit 实例和传入的 serviceClass(一个接口类)来创建一个实现了该接口的网络服务实例。

  private val okHttpClient: OkHttpClient
        get() =OkHttpClient.Builder()
            //日志拦截器
            .addInterceptor(logInterceptor)
            //请求超时时间
            .connectTimeout(TIME_OUT_SECONDS,TimeUnit.SECONDS)
            .build()
 fun<T> getService(serviceClass: Class<T>,baseUrl: String? = null) : T{
        return Retrofit.Builder()
            .client(okHttpClient)
            .addConverterFactory(GsonConverterFactory.create())//添加Gson转换器
            .baseUrl(BASE_URL)
            .build()
            .create(serviceClass)
    }

3.3 DataRepository

继承Api, 用Api类来创建请求服务实例,重写Api的方法,返回服务实例进行调用的结果。

object DataRepository: Api {
    private val service by lazy { RetrofitManager.getService(Api::class.java) }

    override suspend fun getUser(
        name: String,
        age: String
    ): ApiResponse<List<User>> {
        return service.getUser(name, age)
    }
    
}

3.4 在ViewModel中请求

 fun getUser(name: String,age: String){
        viewModelScope.launch {
            val result = DataRepository.getUser()
            Log.d("tian", "retrofit:$result")
        }
    }

3.4 最后在ui里面调用

getUser("","")

标签:String,val,记录,age,Api,Android,Retrofit,name
From: https://blog.csdn.net/qq_45077023/article/details/140413806

相关文章

  • Android Studio项目中的重复类、动态版本控制及其他优化方法
    本文介绍在Android开发过程中,我们常常会遇到一些棘手的问题,如重复类冲突、动态版本控制及依赖打包等。本文将介绍如何解决这些问题,并提供一些有用的优化方法。1.解决重复类冲突问题在引入多个JAR包或AAR包时,可能会遇到类重复的问题,导致编译失败。这里提供了两种解决方......
  • 记录 OpenWrt 执行 opkg update 命令报错 Failed to download,但是换源无效且源用浏览
    记录OpenWrt执行opkgupdate命令报错Failedtodownload,但是换源无效且源用浏览器可访问的解决方案解决方法首先给出解决方法:)网络-->接口-->WAN-->编辑-->高级设置取消勾选“自动获取DNS服务器”-->在使用自定义的DNS服务器一栏中添加并输入可用的DNS地址。......
  • SQLite数据库在Android中的使用
    目录一,SQLite简介二,SQLIte在Android中的使用1,打开或者创建数据库2,创建表3,插入数据4,删除数据5,修改数据 6,查询数据三,SQLiteOpenHelper类四,SQLite中事务的处理一,SQLite简介        SQLite是一个无服务器的,零配置的,事务性的SQL数据库引擎。无服务器,意味着使......
  • 带时间戳的 Python 命令行历史记录
    有没有办法记录每个命令的时间?例如,挂钩交互式shell,以便它将相同的内容写入~/.python_history到~/.python_history_timestamps但带有时间戳?我正在跟踪我白天所做的事情并将其放入我的日历中。为了帮助回溯,我使用了firefox历史记录、Dropbox活动、一个......
  • Android10.0 锁屏分析-KeyguardPatternView图案锁分析
    首先一起看看下面这张图:通过前面锁屏加载流程可以知道在KeyguardSecurityContainer中使用getSecurityView()根据不同的securityModeinflate出来,并添加到界面上的。我们知道,Pattern锁所使用的layout是R.layout.keyguard_pattern_view;<com.android.keyguard.KeyguardPat......
  • Codeforces Round 960 (Div. 2) 补题记录(A~D)
    打的稀烂,但是还是上分了(A考虑对值域做一个后缀和。若某一个后缀和的值是奇数那么先手就可以获胜。否则就不可以获胜。(我才不会告诉你我这题吃了一次罚时的)#pragmaGCCoptimize(3)#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;intmysqrt(intx){......
  • 记录:Win10磁盘容量显示条不见了怎么办?
    今天发现Win10磁盘容量显示条不见了网上的方法 是在此电脑对话框的空白位置单击鼠标右键,选择“查看”,然后将查看方式选择为“平铺”。但是这个方法对我这个没用。于是我就找啊找啊真找到了一个解决的办法先说原因吧:在清理注册表或者卸载软件引起的注册表变化可能会带来......
  • 如何在Android Java中访问android/data/文件夹(应用程序包)?
    **我的应用程序的包名称是com.gorlopsen。该应用程序必须上传了没有它就无法工作的文件。文件下载到存档中并解压到android/data/com.gorlopsen文件夹中。但是,在解压阶段,出现下载错误,导致应用程序无法使用。在网上找到了有关访问所有文件的信息,但并不适合我。是否可以请求......
  • Beyond Compare 5 记录
    目录BeyondCompare5记录1、定位按钮事件2、关键函数"TCertDecode::LoadCertString"2.0试用时2.1TBcCertDecoder公钥解密2.2解析license信息3、license结构patch&pyBeyondCompare5记录Delphi程序,接触不多,对程序注册简单跟了下;1、定位按钮事件通过资源文件,查找注册......
  • 基于Android平台开发,在线电影购票系统(九)用户评论列表实现
    1.涉及到的技术点使用SQLite数据库实现用户评论数据保存使用RecyclerView+adapter实现用户评论列表2.具体代码实现过程CommentListAdapter.java适配器publicclassCommentListAdapterextendsRecyclerView.Adapter<CommentListAdapter.MyHolder>{privateList......