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

android用Retrofit进行网络请求和解析

Retrofit 的原理

Retrofit的核心原理包括动态代理与Service Method的构建、注解解析与请求配置、网络请求执行与响应处理等。它是一个类型安全的HTTP客户端,用于Android和Java平台,通过将HTTP API转化为Java接口的方式,简化了网络请求的编写工作。
Retrofit利用Java的注解处理器分析定义好的HTTP接口,将注解(如@GET, @POST等)转化为OkHttp请求的具体配置。当调用接口方法时,Retrofit通过动态代理机制,根据接口注解生成OkHttp的Request对象。

再者,Retrofit在内部实现上,主要依赖于其姊妹项目OkHttp来完成实际的网络请求。Retrofit相当于是OkHttp的一个封装层,提供了更简洁易用的API供开发者使用。它通过注解的方式来描述HTTP请求的配置,省去了手动创建和管理HTTP请求的复杂性。

增加依赖

由于Retrofit是基于OkHttp开发的,因此添加下面的依赖会自动将Retrofit、OkHttp和Okio这几个库一起下载,我们无须再手动引入OkHttp库。另外,Retrofit还会将服务器返回的JSON数据自动解析成对象,因此下面的第二条依赖就是一个Retrofit的转换库,它是借助GSON来解析JSON数据的,所以会自动将GSON库一起下载下来,这样我们也不用手动引入GSON库了。除了GSON之外,Retrofit还支持各种其他主流的JSON解析库,包括Jackson、Moshi等,不过毫无疑问GSON是最常用的。
在dependencies中添加如下依赖:

implementation("com.squareup.retrofit2:retrofit:2.6.1")
implementation("com.squareup.retrofit2:converter-gson:2.6.1")

程序设置网络访问

java.lang.SecurityException: Permission denied (missing INTERNET permission?)你的应用程序缺少访问互联网的权限。

在AndroidManifest.xml 的manifest标签中增加代码:

<uses-permission android:name="android.permission.INTERNET" />

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.playtest/com.example.playtest.MainActivity}: android.os.NetworkOnMainThreadException
这个错误是因为你在主线程中进行了网络操作。在Android中,主线程用于处理UI和用户交互,因此不能进行耗时的操作,如网络请求。你需要将网络操作放在一个单独的线程中执行。你可以使用AsyncTask或者HandlerThread来实现。
要在 Android 的 Activity 或 Fragment 中使用异步任务,可以这样做:

CoroutineScope(Dispatchers.Main).launch {// 在这里执行异步任务}

新增一个基础接口返回类,如下
所示:

data class Example (val code: Long,val data: Data,val msg: String
)

同时创建一个service,

interface PlatformService {@GET("/service/anonymous/public/config/domain")fun getConfig(): Call<Example>
}

调用该接口并使用gson解析:

        CoroutineScope(Dispatchers.Main).launch {val retrofit = Retrofit.Builder()//必须为ip或者域名地址.baseUrl("https://localhost:8080/").addConverterFactory(GsonConverterFactory.create()).build()val appService = retrofit.create(PlatformService::class.java)appService.getConfig().enqueue(object : Callback<ExampleGenerate> {override fun onResponse(call: Call<ExampleGenerate>,response: Response<ExampleGenerate>) {val body = response.body()println("返回数据")if (body != null) {println( body.data.catering)println(body.toString())}}override fun onFailure(call: Call<ExampleGenerate>, t: Throwable) {t.printStackTrace()}})}

结论

Retrofit 是一款功能强大的网络请求库,简化了开发流程,提供高效的网络请求能力。通过深入学习 Retrofit 的高级使用与原理,我们能够更好地理解和应用这一库,从而提高开发效率和代码质量。

相关文章:

android用Retrofit进行网络请求和解析

Retrofit 的原理 Retrofit的核心原理包括动态代理与Service Method的构建、注解解析与请求配置、网络请求执行与响应处理等。它是一个类型安全的HTTP客户端&#xff0c;用于Android和Java平台&#xff0c;通过将HTTP API转化为Java接口的方式&#xff0c;简化了网络请求的编写…...

list容器的基本使用

目录 前言一&#xff0c;list的介绍二&#xff0c;list的基本使用2.1 list的构造2.2 list迭代器的使用2.3 list的头插&#xff0c;头删&#xff0c;尾插和尾删2.4 list的插入和删除2.5 list 的 resize/swap/clear 前言 list中的接口比较多&#xff0c;与string和vector类似&am…...

34万汉语词语成语反义词ACCESS\EXCEL数据库

反义词就是两个意思相反的词&#xff0c;包括&#xff1a;绝对反义词和相对反义词。分为成对的意义相反、互相对立的词。如&#xff1a;真——假&#xff0c;动——静&#xff0c;拥护——反对。这类反义词所表达的概念意义互相排斥。或成对的经常处于并举、对待位置的词。如&a…...

yum方式更新Jenkins

目的 使用yum方式更新Jenkins。 步骤 查看最新可用版本 $ yum list jenkins Last metadata expiration check: 0:03:44 ago on Fri Jun 14 06:10:01 2024. Installed Packages jenkins.noarch 2.452.1-1.1 jenkins Available Pa…...

欢乐钓鱼大师保姆级教程,云手机辅助攻略解析!

在这份攻略中&#xff0c;我们将为大家详细介绍如何在《欢乐钓鱼大师》中快速提升钓鱼技能和游戏进展&#xff0c;避免常见的新手误区和不必要的资源浪费。无论是钓鱼点的选择、装备的合理使用还是技能的优化&#xff0c;我们都会一一为您详细解析&#xff0c;帮助您成为一名优…...

数据结构:手撕代码——顺序表

目录 1.线性表 2.顺序表 2.1顺序表的概念 2.2动态顺序表实现 2.2-1 动态顺序表实现思路 2.2-2 动态顺序表的初始化 2.2-3动态顺序表的插入 检查空间 尾插 头插 中间插入 2.2-4 动态顺序表的删除 尾删 头删 中间删除 2.2. 5 动态顺序表查找与打印、销毁 查找 …...

jenkins使用注意问题

1.在编写流水线时并不知道当前处在哪个目录&#xff0c;导致名使用不当&#xff0c;以及文件位置不清楚 流水线任务默认路径是&#xff0c;test4_mvn为jenkins任务名 [Pipeline] sh (hide)pwd /var/jenkins_home/workspace/test4_mvn maven任务也是&#xff0c;看来是一样的…...

Kaggle -- Titanic - Machine Learning from Disaster

新手kaggle之旅&#xff1a;1 . 泰坦尼克号 使用一个简单的决策树进行模型构建&#xff0c;达到75.8%的准确率&#xff08;有点低&#xff0c;但是刚开始&#xff09; 完整代码如下&#xff1a; import pandas as pd import numpy as npdf pd.read_csv("train.csv&quo…...

蓝牙音频解码芯片TD5163介绍,支持红外遥控—拓达半导体

蓝牙芯片TD5163A是一颗支持红外遥控、FM功能和IIS音频输出的蓝牙音频解码芯片&#xff0c;此颗芯片的亮点在于同时支持真立体声&单声道、TWS功能、PWM、音乐频谱和串口AT指令控制等功能&#xff0c;芯片在支持蓝牙无损音乐播放的同时&#xff0c;还支持简单明了的串口发送A…...

windows 下 docker 入门

这里只是具体过程&#xff0c;有不清楚的欢迎随时讨论 1、安装docker &#xff0c;除了下一步&#xff0c;好像也没有其他操作了 2、安装好docker后&#xff0c;默认是运行在linux 下的&#xff0c;这时我们需要切换到windows 环境下&#xff0c; 操作&#xff1a;在右下角d…...

《别让“想太多”挡了你的骑行路,对比一下更丝滑》

在探索骑行的世界时&#xff0c;我们往往会被一些先入为主的想法所束缚。本文将带你对比骑行与其他运动和生活方式&#xff0c;揭示那些阻碍你爱上骑行的认知误区。 一、年龄不是界限&#xff1a;骑行与跑步的比较与跑步相比&#xff0c;骑行同样适合所有年龄段&#xff0c;但它…...

hadoop和hbase对应版本关系

https://hbase.apache.org/book.html#configuration...

现代X86汇编-C和ASM混合编程举例

端午假期安装好了vs c2022,并写了个简单的汇编代码&#xff0c;证明MASM真的可以运行。今天需要搞一个实实在在的C和ASM混合编程的例子&#xff0c;因为用纯汇编的求伯君写WPS的时代一去不复返了。个别关键函数用汇编&#xff0c;充分发挥CPU的特色功能&#xff0c;偶尔还是需要…...

485. 最大连续 1 的个数

给定一个二进制数组 nums &#xff0c; 计算其中最大连续 1 的个数。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,0,1,1,1] 输出&#xff1a;3 解释&#xff1a;开头的两位和最后的三位都是连续 1 &#xff0c;所以最大连续 1 的个数是 3.示例 2: 输入&#xff1a;nums […...

席卷的B站《植物大战僵尸杂交版》V2.0.88整合包,PC和手机可用,含通关存档和视频教程!

今天给大家安利一款席卷B站&#xff0c;火爆全网的游戏——《植物大战僵尸杂交版》2.0.88整合包。 这个是网络上现存植物大战僵尸杂交版的最全整合&#xff0c;包含了修改工具&#xff0c;超强通关存档和高清工具。工具包有安装视频教程&#xff0c;支持手机版和pc多端使用&am…...

液晶拼接屏企业应该采取哪些措施来提升整体竞争力和市场地位呢?

步入智能科技时代以来&#xff0c;商显行业面对着各式各样的挑战&#xff0c;人工智能、AI大模型等整合中&#xff0c;液晶拼接屏企业应该采取哪些措施以提升整体竞争力和市场地位。下面小编个人观点简单说一下&#xff1b;下是一些关键的措施&#xff1a; 首先&#xff0c;加…...

PHP在线生成查询产品防伪证书系统源码

源码介绍 PHP在线生成查询产品防伪证书系统源码&#xff0c;源码自带90套授权证书模板&#xff0c;带PSD公章模板&#xff0c;证书PSD源文件。 环境要求&#xff1a;PHPMYSQL&#xff0c;PHP 版本请使用PHP5.1 ~5.3。 图片截图 源码安装说明 1.上传所有文件至你的空间服务器…...

遥控玩具车电机驱动应用中的双H桥驱动芯片

遥控玩具车的基本工作原理是通过无线电遥控器发送信号&#xff0c;这些信号被玩具车内的接收器接收并解码&#xff0c;从而控制玩具车的运行。根据车身外型的不同&#xff0c;可以分为&#xff1a;普通的私家房车、越野车、货柜车、翻斗车等等。遥控器的操作&#xff0c;如前进…...

Linux 基本指令1

ls指令 ls【-选项】【目录或文件】当不指定目录或文件时指令能列出当前目录下所有文件除隐藏文件 选项&#xff1a; -a 列出所有包括隐藏的文件-隐藏文件以.开头。 -d 将目录如文件般显示-一般用ls显示目录是显示其目录中所有文件&#xff0c;加-d则显示目录的信息 -r 以反…...

基于Seatunnel最新2.3.5版本分布式集群安装部署指南(小白版)

基于Seatunnel2.3.5版本分布式集群安装部署 1.环境准备2.JDK安装3.Maven安装4.Seatunnel在master节点安装部署配置4.1.下载Seatunnel安装包4.2.解压下载好的tar.gz包4.3.下载连接器4.4.配置Seatunnel的系统环境变量4.5.配置 SeaTunnel Engine服务 JVM参数4.6.配置文件中集群相关…...

如何用CodeMaker将Java/Scala开发效率提升300%?5个核心技巧带你掌握智能代码生成

如何用CodeMaker将Java/Scala开发效率提升300%&#xff1f;5个核心技巧带你掌握智能代码生成 【免费下载链接】CodeMaker A idea-plugin for Java/Scala, support custom code template. 项目地址: https://gitcode.com/gh_mirrors/co/CodeMaker 作为Java/Scala开发者&a…...

快马平台十分钟速成:用AI大模型构建你的第一个智能客服对话Agent原型

最近在尝试用AI大模型构建智能客服对话系统&#xff0c;发现InsCode(快马)平台特别适合快速验证这类原型。花十分钟就能搭建出具备基础功能的对话agent&#xff0c;和大家分享下具体实现思路&#xff1a; 界面设计 先用HTML搭建基础框架&#xff0c;主要包含三个部分&#xff1…...

教育培训品牌视觉体系全攻略:5步打造统一、专业、让人过目不忘的品牌形象

教育培训机构的品牌视觉是否混乱&#xff0c;直接影响家长和学员的第一印象。宣传海报用一种蓝&#xff0c;公众号封面又是另一种蓝&#xff0c;课程介绍册的字体也和官网不一样。这种视觉不统一的问题&#xff0c;会让品牌显得不够专业&#xff0c;降低信任感。今天分享一套用…...

ViGEmBus驱动全攻略:解锁游戏控制新可能

ViGEmBus驱动全攻略&#xff1a;解锁游戏控制新可能 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 1. 驱动异常诊断&#xff1a;从现象到本质的定位方法 当…...

从数据到诊断:深度学习驱动下的多模态抑郁症识别技术全景

1. 抑郁症识别技术的现状与挑战 抑郁症被称为21世纪的"心灵感冒"&#xff0c;全球约有3.5亿患者。传统诊断主要依赖医生问诊和量表评估&#xff0c;这种方式存在主观性强、耗时长的痛点。我在参与某三甲医院精神科数字化改造项目时&#xff0c;亲眼见证了一位资深医生…...

从机械模型到控制算法:手把手教你用Adams 2020与MATLAB/Simulink搭建第一个联合仿真项目

Adams与Simulink联合仿真入门&#xff1a;零基础实现小球圆周运动控制 当多体动力学仿真遇上控制系统设计&#xff0c;Adams与MATLAB/Simulink的联合仿真能力为工程师打开了全新的可能性。本文将带你从零开始&#xff0c;完成第一个联合仿真项目——控制一个小球实现匀速圆周运…...

ProperTree三分钟精通:跨平台Plist编辑器的核心工作流指南

ProperTree三分钟精通&#xff1a;跨平台Plist编辑器的核心工作流指南 【免费下载链接】ProperTree Cross platform GUI plist editor written in python. 项目地址: https://gitcode.com/gh_mirrors/pr/ProperTree ProperTree是一款采用Python和Tkinter开发的跨平台GUI…...

Phi-4-Reasoning-Vision镜像使用指南:双卡负载均衡与CUDA内存优化技巧

Phi-4-Reasoning-Vision镜像使用指南&#xff1a;双卡负载均衡与CUDA内存优化技巧 1. 工具概述 Phi-4-Reasoning-Vision是基于微软Phi-4-reasoning-vision-15B多模态大模型开发的高性能推理工具&#xff0c;专为双卡4090环境优化设计。这个工具能够充分发挥15B大模型的深度推…...

数字人开发新范式:Fay-UE5虚拟交互引擎零基础实战指南

数字人开发新范式&#xff1a;Fay-UE5虚拟交互引擎零基础实战指南 【免费下载链接】fay-ue5 项目地址: https://gitcode.com/gh_mirrors/fa/fay-ue5 在数字内容创作与智能交互需求爆发的当下&#xff0c;开发者面临三大核心挑战&#xff1a;如何快速构建高逼真度虚拟形…...

Figma全中文界面解决方案:从安装到精通的实战指南

Figma全中文界面解决方案&#xff1a;从安装到精通的实战指南 【免费下载链接】figmaCN 中文 Figma 插件&#xff0c;设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 作为一名中文设计师&#xff0c;你是否曾因Figma全英文界面而在操作时频繁…...