app逆向-⽹络请求库Retrofit2

文章目录

    • 一、前言
    • 二、POST应用
    • 三、GET应用

一、前言

Retrofit2 是基于 OkHttp 构建的 RESTful HTTP 客户端,专门用于简化 HTTP 请求的过程,尤其是用于访问 RESTful API。

Retrofit2 提供了一个声明式的方式来定义 REST API 接口,通过注解来描述请求方法、请求参数、请求头等,它自动处理了请求的创建、执行、响应的转换等步骤。

Retrofit2 默认使用 OkHttp 来执行网络请求,并且可以与 OkHttp 结合使用以发挥更强大的功能。

二、POST应用

请求地址:

POST: https://reqres.in/api/users

发送的数据

{
"name": "morpheus",
"job": "leader"
}

接收到的数据

{
"name": "morpheus",
"job": "leader",
"id": "171",
"createdAt": "2021-12-22T11:46:26.302Z"
}

接下来代码实现,先创建解析类UserParse,用于序列化字符串:

package com.example.myapplication;import com.google.gson.annotations.SerializedName;public class UserParse {@SerializedName("name")String name;@SerializedName("job")String job;@SerializedName("id")String id;@SerializedName("createdAt")String createdAt;
}

接下来创建api接口类ApiService

package com.example.myapplication;import retrofit2.Call;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;public interface ApiService {// post请求@POST("api/users")@FormUrlEncodedCall<UserParse> createUser(@Field("name") String name, @Field("job") String job);
}

请求实现:

// retrofit2 post 请求
private void retroFit2postDemo(){String baseUrl = "https://reqres.in/";Retrofit mRetrofit = new Retrofit.Builder().baseUrl(baseUrl)// 将字符串转换成java对象.addConverterFactory(GsonConverterFactory.create()).build();tvContent.setText("异步请求中.......");mRetrofit.create(ApiService.class).createUser("admin", "java").enqueue(new retrofit2.Callback<UserParse>() {@Overridepublic void onResponse(retrofit2.Call<UserParse> call, retrofit2.Response<UserParse> response) {// 处理请求成功的响应String name = response.body().name;String job = response.body().job;String id = response.body().id;String createdAt = response.body().createdAt;// 在这里处理响应数据tvContent.setText("异步请求成功" + ',' + name + ',' + job + ',' + id + ',' + createdAt);}@Overridepublic void onFailure(retrofit2.Call<UserParse> call, Throwable t) {// 处理请求失败tvContent.setText("异步请求失败");}});
}

效果图:
在这里插入图片描述

三、GET应用

请求地址:

GET: https://reqres.in/api/users?page=2

接收到的数据:
在这里插入图片描述
代码实现创建解析类UserPageParse

package com.example.myapplication;import com.google.gson.annotations.SerializedName;public class UserPageParse {@SerializedName("page")Integer page;@SerializedName("total")Integer total;@SerializedName("total_pages")Integer total_pages;
}

接下来创建api接口类ApiService

package com.example.myapplication;import retrofit2.Call;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;public interface ApiService {// get请求@GET("api/users")// UserList 请求函数名,page请求参数Call<UserPageParse> UserList(@Query("page") Integer page);
}

请求实现:

// retrofit2 get 请求
private void retroFit2getDemo(){String baseUrl = "https://reqres.in/";Retrofit mRetrofit = new Retrofit.Builder().baseUrl(baseUrl)// 将字符串转换成java对象.addConverterFactory(GsonConverterFactory.create()).build();tvContent.setText("异步请求中.......");mRetrofit.create(ApiService.class).UserList(2).enqueue(new retrofit2.Callback<UserPageParse>() {@Overridepublic void onResponse(retrofit2.Call<UserPageParse> call, retrofit2.Response<UserPageParse> response) {// 处理请求成功的响应Integer page = response.body().page;Integer total = response.body().total;Integer total_pages = response.body().total_pages;// 在这里处理响应数据tvContent.setText("异步请求成功" + ',' + page + ',' + total + ',' + total_pages);}@Overridepublic void onFailure(retrofit2.Call<UserPageParse> call, Throwable t) {// 处理请求失败tvContent.setText("异步请求失败");}});
}

效果图:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/467901.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

备战蓝桥杯---动态规划(入门1)

先补充一下背包问题&#xff1a; 于是&#xff0c;我们把每一组当成一个物品&#xff0c;f[k][v]表示前k组花费v的最大值。 转移方程还是max(f[k-1][v],f[k-1][v-c[i]]w[i]) 伪代码&#xff08;注意循环顺序&#xff09;&#xff1a; for 所有组&#xff1a; for vmax.....0…

Linux_信号

一个进程退出有两种情况&#xff1a;1.正常执行完毕。2.程序执行中异常退出。第一种情况可以通过进程退出码来获取进程执行结果&#xff0c;第二种情况需要通过信号来判断进程异常退出原因。那么进程在什么样的条件下会产生信号&#xff0c;进程又是怎样处理产生的信号呢&#…

2.13学习总结

1.出差&#xff08;Bleeman—ford&#xff09;&#xff08;spfa&#xff09; &#xff08;dijkstra&#xff09; 2.最小生成树&#xff08;prim&#xff09;&#xff08;Kruskal&#xff09; 最短路问题&#xff1a; 出差https://www.luogu.com.cn/problem/P8802 题目描述 AA …

mysql8.0.36主从复制(读写分离)配置教程

1、关闭防火墙 使用命令行关闭防火墙 在Ubuntu系统中&#xff0c;可以使用以下命令关闭防火墙&#xff1a; sudo ufw disable执行该命令后&#xff0c;系统会提示是否要关闭防火墙&#xff0c;确认后即可关闭防火墙。 查看防火墙状态 使用以下命令可以查看防火墙当前的状…

React18原理: 时间分片技术选择

渲染1w个节点的不同方式 1 &#xff09;案例1&#xff1a;一次渲染1w个节点 <div idroot><div><script type"text/javascript">function randomHexColor() {return "#" ("0000" (Math.random() * 0x1000000 << 0).toS…

单片机学习笔记---DS18B20温度传感器

目录 DS18B20介绍 模拟温度传感器的基本结构 数字温度传感器的应用 引脚及应用电路 DS18B20的原理图 DS18B20内部结构框图 暂存器内部 单总线介绍 单总线电路规范 单总线时序结构 初始化 发送一位 发送一个字节 接收一位 接收一个字节 DS18B20操作流程 指令介…

OpenAI宣布ChatGPT新增记忆功能;谷歌AI助理Gemini应用登陆多地区

&#x1f989; AI新闻 &#x1f680; OpenAI宣布ChatGPT新增记忆功能&#xff0c;可以自由控制内存&#xff0c;提供个性化聊天和长期追踪服务 摘要&#xff1a;ChatGPT新增的记忆功能可以帮助AI模型记住用户的提问内容&#xff0c;并且可以自由控制其内存。这意味着用户不必…

【C++第二阶段】空指针访问成员函数常成员函数常成员属性

你好你好&#xff01; 以下内容仅为当前认识&#xff0c;可能有不足之处&#xff0c;欢迎讨论&#xff01; 文章目录 空指针访问成员函数常成员函数&常成员属性 空指针访问成员函数 类对象类型的空指针可以访问成员函数&#xff0c;但是不能够访问带有成员属性的成员函数。…

算法刷题:复写零

复写零 .习题链接题目描述算法原理初始值步骤1步骤2我的答案: . 习题链接 复写零 题目描述 给你一个长度固定的整数数组 arr &#xff0c;请你将该数组中出现的每个零都复写一遍&#xff0c;并将其余的元素向右平移。 注意&#xff1a;请不要在超过该数组长度的位置写入元素…

【C++】内存详解(堆,栈,静态区)

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

【DDD】学习笔记-事件风暴与领域分析建模

在确定了全景事件流之后&#xff0c;可以在战略设计层面继续精进&#xff0c;鉴别出领域与限界上下文的边界&#xff0c;进入战术设计阶段的领域分析建模。 事件风暴的分析模型要素 通过事件风暴进行领域分析建模&#xff0c;其核心的模型要素就是“事件”。除此之外&#xf…

CUDA编程 - 共享内存 - shared memory - 学习记录

CUDA编程 - 共享内存 共享内存一、为什么要使用 shared memory&#xff1f;1.1、从硬件出发理解&#xff1a;1.2、从软件出发理解&#xff1a; 二、如何使用shared memory2.1、静态共享内存2.2、动态共享内存 三、实践 - 使用共享内存执行矩阵乘法总结 共享内存 一、为什么要使…