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

[Android]使用Retrofit进行网络请求

以下是使用 Retrofit 发送 POST 请求获取分页城市列表的 Kotlin 代码示例

1.在你的 build.gradle 文件中添加 Retrofit 和 Gson 的依赖

dependencies {......implementation("com.squareup.retrofit2:retrofit:2.9.0")implementation("com.squareup.retrofit2:converter-gson:2.9.0")
}

 

2.申请网络权限

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"><uses-permission android:name="android.permission.INTERNET" />......</manifest>

 

3.定义数据类

data class CityResponse(val code: String,val message: String,val data: CityDataInfo
)data class  CityDataInfo(val page: Int,var pageSize: Int,var totalPages: Int,var totalItems: Int,val data: List<CityModel>
)data class CityModel(val id: Int,val name: String,val code: String
)data class PageRequest(val page: Int,val pageSize: Int
)

数据格式如下:

 

4.定义一个 Retrofit 接口

import retrofit2.Call
import retrofit2.http.Body
import retrofit2.http.POSTinterface ApiService {@POST("api/cityList.php")fun getCities(@Body request: PageRequest): Call<CityResponse>
}

在这个接口中,@POST 注解表示这是一个 POST 请求,"api/cityList.php" 是你的 API 端点,getCities 是你的请求方法,它接受一个 PageRequest 对象作为请求体,并返回一个对象。

 

5.创建一个 Retrofit 实例用来发送 POST 请求

import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactoryclass HomeFragment: Fragment() {private var dataArr: List<CityModel> = listOf()override fun onViewCreated(view: View, savedInstanceState: Bundle?) {super.onViewCreated(view, savedInstanceState)requestCityList()}private fun requestCityList() {val retrofit = Retrofit.Builder().baseUrl("https://www.lnktools.com/").addConverterFactory(GsonConverterFactory.create()).build()val service = retrofit.create(ApiService::class.java)val call = service.getCities(PageRequest(1, 20))call.enqueue(object : Callback<CityResponse> {override fun onResponse(call: Call<CityResponse>, response: Response<CityResponse>) {if (response.isSuccessful) {val res = response.body()var info = res?.datavar list = info?.datadataArr += list ?: listOf()// 处理响应println("dataArr count = ${dataArr.count()}")} else {// 处理错误}}override fun onFailure(call: Call<CityResponse>, t: Throwable) {// 处理失败}})}}

这段代码首先创建了一个 Retrofit 实例,并配置了基础 URL 和 Gson 转换器。然后,我们使用 retrofit.create 方法来创建一个 ApiService 的实例。最后,我们调用 getCities 方法来发送 POST 请求,并使用 enqueue 方法来异步发送请求。在 Callback 的 onResponse 方法中,我们可以处理服务器的响应,在 onFailure 方法中,我们可以处理请求失败的情况。

6.网络安全配置

正常来说,按照上面操作完成网络请求已经没问题了。但在手机设置代理抓包时,还是可能会导致网络请求失败,这时可以按下面的方式处理。

到 res -> xml 创建一个network-security-config.xml文件,配置如下。

<network-security-config><base-config cleartextTrafficPermitted="true"><trust-anchors><certificates src="system" /><certificates src="user" /></trust-anchors></base-config>
</network-security-config>

然后,到清单文件为application配置networkSecurityConfig。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"><uses-permission android:name="android.permission.INTERNET" /><application android:networkSecurityConfig="@xml/network_security_config" ></application></manifest>

注意:在开发设置 cleartextTrafficPermitted="true" 来允许明文流量,便于我们抓包。但在发布应用时,为了提高应用的安全性,通常建议禁用明文流量,即将 cleartextTrafficPermitted 设置为 false。这样可以确保应用只能通过加密的 HTTPS 连接与服务器通信,防止敏感数据被窃取或篡改。

相关文章:

[Android]使用Retrofit进行网络请求

以下是使用 Retrofit 发送 POST 请求获取分页城市列表的 Kotlin 代码示例 1.在你的 build.gradle 文件中添加 Retrofit 和 Gson 的依赖 dependencies {......implementation("com.squareup.retrofit2:retrofit:2.9.0")implementation("com.squareup.retrofit2…...

OpenGL 绘制圆形平面(Qt)

文章目录 一、简介二、代码实现三、实现效果一、简介 这里使用一种简单的思路来生成一个圆形平面: 首先,我们需要生成一个单位圆,半径为1,法向量为(0, 0, 1),这一步我们可以使用一些函数生成圆形点集。之后,指定面片的索引生成一个圆形平面。当然这里为了后续管理起来方便…...

JAVA系列---Servlet详解

目录 背景为何会出现ServletWeb开发的本质 ServletsCGIFastCGIWSGIServlet总结 wsgi与servlet出现时间社区特点对web开发的影响 servlet详解特性主要工作执行逻辑 应用Tomcat背景embedded tomcat本质 背景 为何会出现Servlet Servlet是Server Applet 的缩写&#xff0c;译为“…...

机器人制作开源方案 | 钻孔植树一体化沙漠车

作者&#xff1a;徐邦国、张博宇、刘露、李晶晶、吕洁秀单位&#xff1a;天津职业技术师范大学 机械工程学院指导老师&#xff1a;何永利 摘要&#xff1a;本项目旨在设计一种专用于沙漠植树的植树车&#xff0c;以沙漠自动化植树为研究对象&#xff0c;提出一种创新式钻…...

OmniGraffle

安装 在mac上安装OmniGraffle&#xff0c;找一个正版或者啥的都行&#xff0c;安装好后&#xff0c;可以直接在网上找一个激活码&#xff0c;然后找到软件的许可证&#xff0c;进行添加即可。 使用 新建空白页 然后图形啥的看一眼工具栏就知道了&#xff0c;颜色形状还是挺…...

【C++上层应用】4. 多线程

文章目录 【 1. 创建线程 】【 2. 终止线程 】【 3. 实例 】【 4. 向线程传递参数 】【 5. 连接和分离线程 】 多线程 是多任务处理的一种特殊形式&#xff0c;多任务处理允许让电脑同时运行两个或两个以上的程序。一般情况下&#xff0c;两种类型的多任务处理&#xff1a;基于…...

【uni-app】uniapp中弹出输入框的示例

uni.showModal({title: 请输入企业名称,content: ,editable: true, //是否显示输入框placeholderText: 请输入企业名称, //输入框提示内容confirmText: 确认,cancelText: 取消,success: (res) > {if (res.confirm) {this.checkDesc.name res.content;// console.log(输入的…...

通过bat脚本控制Oracle服务启动停止

1、将Oracle服务全部设置为手动启动 初始安装Oracle之后服务启动状态&#xff1a; 2、服务功能介绍 3、构建服务启动/停止bat脚本 注意&#xff1a;编码选择ANSI(如果编码不是ANSI运行脚本会显示乱码) echo off :main cls echo 注&#xff1a;请保证该脚本是使用管理员权限…...

GB28181学习(十七)——基于jrtplib实现tcp被动和主动发流

前言 GB/T28181-2022实时流的传输方式介绍&#xff1a;https://blog.csdn.net/www_dong/article/details/134255185 基于jrtplib实现tcp被动和主动收流介绍&#xff1a;https://blog.csdn.net/www_dong/article/details/134451387 本文主要介绍下级平台或设备发流功能&#…...

RealSense深度相机在Ubuntu18.04的ros环境下,保存同一时刻下深度图像和彩色图像

背景&#xff1a;Ubuntu18.04 ROS Melodic 已安装配置好RealSense相关程序&#xff0c;链接D435i相机后&#xff0c;得到如下Rostopic&#xff1a; /camera/color/image_raw # 彩色图像信息 /camera/depth/image_rect_raw # 深度图像信息 于是写一个python程序&am…...

vue3 ref和reactive使用watch属性的方法和区别

在Vue 3中&#xff0c;您可以使用watch函数和watch选项来监视ref和reactive创建的响应式数据的变化。下面是它们的使用方法和区别&#xff1a; 使用方法&#xff1a; 使用ref和watch&#xff1a; import { ref, watch } from vue;const count ref(0);watch(count, (newVal,…...

YOLO目标检测——卫星遥感舰船检测数据集下载分享【含对应voc、coco和yolo三种格式标签】

实际项目应用&#xff1a;卫星遥感舰船检测数据集说明&#xff1a;卫星遥感舰船检测数据集&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富&#xff0c;含船一个类别标签说明&#xff1a;使用lableimg标注软件标注&#xff0c;标注框质量高&#xff0c;含voc(xm…...

org.Hs.eg.db使用--持续修改

org.Hs.eg.db使用–持续修改 加载 library(org.Hs.eg.db)1 基本信息查询 1.1 display the columns columns(org.Hs.eg.db) [1] "ACCNUM" "ALIAS" "ENSEMBL" "ENSEMBLPROT" "ENSEMBLTRANS" "ENT…...

C# Onnx 百度PaddleSeg发布的实时人像抠图PP-MattingV2

目录 效果 模型信息 项目 代码 下载 效果 图片源自网络侵删 模型信息 Inputs ------------------------- name&#xff1a;img tensor&#xff1a;Float[1, 3, 480, 640] --------------------------------------------------------------- Outputs -----------------…...

linux shell操作 - 04 进程间通信

文章目录 Signal 信号信号定义信号的生命周期信号分类linux进程通信案例 Signal 信号 信号定义 Linux信号是进程间通信的一种方式&#xff0c;通过向目标进程发送一个特定的信号&#xff0c;让其执行相应的处理操作&#xff1b; 向目标进程发送信号时&#xff0c;内核会将信号…...

【Java并发】聊聊线程池原理以及实际应用

线程其实对于操作系统来说是宝贵的资源&#xff0c;java层面的线程其实本质还是依赖于操作系统内核的线程进行处理任务&#xff0c;如果频繁的创建、使用、销毁线程&#xff0c;那么势必会非常浪费资源以及性能不高&#xff0c;所以池化技术&#xff08;数据库连接池、线程池&a…...

自然语言处理常用方法和评价指标

常用方法 文本分类&#xff1a;如情感分析、主题标签分类。使用方法如朴素贝叶斯、支持向量机、神经网络等。信息提取&#xff1a;从文本中提取结构化信息&#xff0c;如命名实体识别&#xff08;NER&#xff09;、关系提取。语义分析&#xff1a;理解文本的含义&#xff0c;包…...

FFmpeg常用命令行讲解及实战一

文章目录 前言一、学习资料参考二、FFmpeg 选项1、主要选项①、主要命令选项②、举例 2、视频选项①、主要命令选项②、举例1&#xff09;提取固定帧2&#xff09;禁止输出视频3&#xff09;指定视频的纵横比 3、音频选项①、主要命令选项②、举例 4、字幕选项①、主要命令选项…...

Java的ArrayList中关于删除的常用操作及方法

目录 remove(int index)方法 remove(Object o)方法 removeAll​(Collection c)方法 removeIf​(Predicate filter)方法 removeRange​(int fromIndex, int toIndex)方法 remove(int index)方法 remove(int index)是ArrayList类中用于删除指定位置元素的方法。它接收一个整…...

低成本打造便携式无线网络攻防学习环境

1.摘要 一直以来, 无线网络安全问题与大众的个人隐私息息相关, 例如: 为了节省流量, 连接到一个看似安全的免费WiFi, 在使用过程中泄露自己的各类密码信息甚至银行卡账号密码信息。随着家用智能电器的普及, 家中的各类智能设备连入家里的无线网络, 却突然失灵, 甚至无法正常连…...

七种主流网盘直链解析技术深度解析:开源方案的技术实现与架构设计

七种主流网盘直链解析技术深度解析&#xff1a;开源方案的技术实现与架构设计 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动…...

nli-MiniLM2-L6-H768真实案例:某省级政务平台日均处理50万+文本分类请求

nli-MiniLM2-L6-H768真实案例&#xff1a;某省级政务平台日均处理50万文本分类请求 1. 项目背景与挑战 某省级政务服务平台每天需要处理超过50万条来自市民的咨询、投诉和建议文本。传统的人工分类方式效率低下&#xff0c;且随着业务量增长面临三大核心挑战&#xff1a; 时…...

AI伦理困境:当你的代码可能被用于作恶时——一位软件测试工程师的视角与行动指南

从技术“守门人”到伦理“吹哨人”在传统的软件开发生命周期中&#xff0c;软件测试工程师的核心职责是保障软件的质量、功能与安全性&#xff0c;扮演着技术交付前的最后一道“守门人”。然而&#xff0c;随着人工智能技术的深度渗透&#xff0c;尤其是机器学习模型被集成到各…...

【花雕学编程】Arduino BLDC 之机器人动态权重分配的混合控制器

基于 Arduino 平台结合 BLDC&#xff08;无刷直流电机&#xff09;的机器人动态权重分配混合控制器&#xff0c;代表了移动机器人控制策略从“单一目标优化”向“多目标动态平衡”的进阶。该系统不再固守固定的控制参数&#xff0c;而是根据机器人的实时状态&#xff08;如速度…...

收藏!全国首所网安本科高校2026招生!小白_程序员入行必看

收藏&#xff01;全国首所网安本科高校2026招生&#xff01;小白/程序员入行必看 全国首所独立设置的网络安全类公办本科高校2026年秋季在武汉招首批本科生&#xff0c;设4个紧扣网安的本科专业。该校产教融合扎实、硬件条件优&#xff0c;但存在不确定性强、转专业空间小、无…...

如何从零开始构建操作系统安全隔离:内存保护与进程隔离完整指南

如何从零开始构建操作系统安全隔离&#xff1a;内存保护与进程隔离完整指南 【免费下载链接】os-tutorial How to create an OS from scratch 项目地址: https://gitcode.com/gh_mirrors/os/os-tutorial 在操作系统开发中&#xff0c;安全隔离是保障系统稳定运行的核心机…...

企业如何用客户关系管理系统提升销售业绩?3步实现业绩增长的实战指南

很多企业在销售管理中会遇到这样的困境&#xff1a;客户没少开发&#xff0c;但成交率一直上不去&#xff1b;销售员没少努力&#xff0c;但业绩就是不见增长&#xff1b;团队没少开会&#xff0c;但问题总是反复出现。实际上&#xff0c;这些都是客户关系管理系统可以解决的问…...

反向海淘爆发期,taocarts如何用技术破解代购供应链对接难题

随着反向海淘的持续升温&#xff0c;“反向海淘为什么火了”成为跨境从业者热议的话题&#xff0c;核心原因在于中国供应链的优势释放与海外市场的刚需缺口&#xff0c;而代购企业的核心痛点的是货源对接低效、数据不同步、人工成本高。作为专注淘宝1688反向代购业务的智能化系…...

大型语言模型中的上下文工程挑战与RW-Steering解决方案

1. 大型语言模型中的上下文工程挑战在当今AI技术快速发展的背景下&#xff0c;大型语言模型(LLM)已成为信息处理和生成的核心工具。这些模型通过吸收和理解输入上下文来生成响应&#xff0c;这种能力被称为"上下文学习"(In-Context Learning, ICL)。然而&#xff0c;…...

全能纯净影音播放器,通吃所有格式——PotPlayer

文章目录全能纯净影音播放器&#xff0c;通吃所有格式——PotPlayer核心定位官方安全下载渠道极简安装与基础配置&#xff08;一步到位&#xff09;1. 安装2.以下是我的常用配置推荐&#xff0c;按需使用核心功能全流程实操高频刚需应用场景全能纯净影音播放器&#xff0c;通吃…...