Android 使用 Gson + OkHttp 实现 API 的常规使用(个人心得)

学习笔记

一、依赖和权限的添加

  1. 网络权限

    在 Android 中进行网络请求时,必须声明权限,确保应用具有访问互联网的能力。

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

依赖项

确保在 build.gradle 中添加以下依赖:

dependencies {implementation 'com.squareup.okhttp3:okhttp:4.9.3'//OkHttp的依赖implementation 'com.google.code.gson:gson:2.8.9'  // Gson依赖
}

二、创建与 JSON 结构匹配的 POJO 类

根据你的 JSON 数据结构创建 Java 类(POJO 类),用于 GSON 解析:

{"reason": "success","result": {"curpage": 1,"allnum": 3,"newslist": [{"id": "ea5caaa3dc77b80916f4e1d00367b52a","ctime": "2024-11-22 10:11","title": "Example News","description": "","source": "News Source","picUrl": "","url": "https://example.com"}]},"error_code": 0
}

创建 POJO 类

public class XinWenPhoto {private String reason;private Result result;private int errorCode;// Getter 方法..................//省略get方法,可选toSing()方法public static class Result {private int curpage;private int allnum;private List<NewsItem> newslist;// Getter 方法..................//省略get方法,可选toSing()方法public List<NewsItem> getNewslist() {return newslist;}}public static class NewsItem {private String id;private String ctime;private String title;private String description;private String source;private String picUrl;private String url;// Getter 方法..................//省略get方法,可选toSing()方法}
}

三、创建网络请求方法

使用 OkHttp 发起 HTTP 请求并利用 Gson 解析响应数据。

public class ApiClient {private static final String API_URL = "http://apis.juhe.cn/fapigx/internet_news/query";private static final String API_KEY = "your_api_key_here"; // 替换为实际的 API Key// 获取新闻数据的 API 请求方法public static void fetchNewsData(String keyword, final NewsCallback callback) {String url = API_URL + "?key=" + API_KEY + "&num=3&word=" + keyword;// 创建 OkHttpClient 实例OkHttpClient client = new OkHttpClient();// 创建请求对象Request request = new Request.Builder().url(url) // 设置请求 URL.get()    // 使用 GET 方法.build();// 发送请求并异步处理回调(enqueue)client.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {callback.onFailure(e.getMessage()); // 请求失败时的回调}@Overridepublic void onResponse(Call call, Response response) throws IOException {if (response.isSuccessful()) {// 获取响应的 JSON 字符串String jsonResponse = response.body().string();// 使用 Gson 解析 JSON 字符串为 ApiResponse 对象Gson gson = new Gson();ApiResponse apiResponse = gson.fromJson(jsonResponse, ApiResponse.class);// 请求成功,调用回调方法传

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

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

相关文章

人工智能的历史概况和脉络

人工智能( AI ) 的历史始于古代&#xff0c;当时有神话、故事和谣言称&#xff0c;人工生物被工匠大师赋予了智慧或意识。从古代到现在&#xff0c;对逻辑和形式推理的研究直接导致了20 世纪 40 年代可编程数字计算机的发明&#xff0c;这是一种基于抽象数学推理的机器。这种设…

基于Arduino的智能太阳能追光系统设计(论文+源码)

1系统方案设计 本次的设基于Arduino的智能太阳能追光系统的设计&#xff0c;整体结构如图2.1所示。整个系统包括Arduino开发板&#xff0c;按键模块&#xff0c;太阳能板&#xff0c;X轴电机,Y轴电机&#xff0c;电池充电模块&#xff0c;电源模块&#xff0c;四路光照检测模块…

Volta——开箱即用的Node.js 版本管理工具

Volta volta 是一个较新的 Node.js 版本管理器&#xff0c;旨在简化 Node.js 和其他工具的安装和管理&#xff0c;在 2019 年出世&#xff0c;仍在积极开发中。Volta 采用了与 nvm 不同的方法&#xff1a;它不是管理 Node.js 的多个版本&#xff0c;而是管理项目及其依赖项。当…

AI+智慧海洋数据集

需要的同学私信联系&#xff0c;推荐关注上面图片 右下角订阅号平台 自取下载。 AI智慧海洋数据可以促进海洋科技领域人工智能新技术产、学、研、用协作&#xff0c;引领行业技术创新&#xff0c;助力AI智慧海洋高质量发展&#xff0c;进一步推广人工智能与海洋科技的融合创新…

【Pandas】pandas eval

Top-level evaluation 方法描述eval(expr[, parser, engine, local_dict, …])用于在传入的字符串形式的表达式上进行高效计算的函数 pandas.eval() pandas.eval() 是 Pandas 库中用于高效计算表达式的函数。它利用 NumExpr 库&#xff08;如果已安装&#xff09;来加速算术…

56.合并区间

以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 示例 1&#xff1a; 输入&#xff1a;intervals [[1,3]…

域名信息收集(小迪网络安全笔记~

附&#xff1a;完整笔记目录~ ps&#xff1a;本人小白&#xff0c;笔记均在个人理解基础上整理&#xff0c;若有错误欢迎指正&#xff01; 2.1 域名信息收集 引子&#xff1a;上一章介绍了服务器的信息收集。本篇则介绍在面对存在Web资产企业时&#xff0c;其域名信息该如何收…

怎样使用Eclipse创建Maven的Java WEB 项目

文章目录 1、第一种方式&#xff08;选择 archetype 方式&#xff09; 1.1、第一步&#xff1a;创建项目1.2、第二步&#xff1a;配置jre1.3、第三步&#xff1a;配置tomcat1.4、第四步&#xff1a;设置为WEB3.11.5、第五步&#xff1a;配置Maven的编译级别 1.5.1、第一种方法…

细说STM32F407单片机SPI基础知识

目录 一、 SPI接口和通信协议 1、 SPI硬件接口 &#xff08;1&#xff09;MOSI(Master Output Slave Input) &#xff08;2&#xff09;MISO(Master Input Slave Output) &#xff08;3&#xff09;SCK 2、SPI传输协议 &#xff08;1&#xff09;CPHA0时的数据传输时序 …

C# OpenCvSharp DNN 实现百度网盘AI大赛-表格检测第2名方案第三部分-表格方向识别

目录 说明 效果 模型 项目 ​编辑 代码 参考 下载 其他 说明 百度网盘AI大赛-表格检测的第2名方案。 该算法包含表格边界框检测、表格分割和表格方向识别三个部分&#xff0c;首先&#xff0c;ppyoloe-plus-x 对边界框进行预测&#xff0c;并对置信度较高的表格边界…

go语言结构体实现数据结构队列(先进先出)存储数据(逐行注释)

正在学习go语言中&#xff0c;欢迎提出宝贵意见 import ("fmt""sync" )// 数据队列以链表的形式存储数据&#xff0c;每个节点存储一个任意类型的数据&#xff0c; // 创建数据队列、添加数据、删除数据、获取队列长度&#xff0c;每个数据存储在一个节点…

Excel + Notepad + CMD 命令行批量修改文件名

注意&#xff1a;该方式为直接修改原文件的文件名&#xff0c;不会生成新文件 新建Excel文件 A列&#xff1a;固定为 renB列&#xff1a;原文件名称C列&#xff1a;修改后保存的名称B列、C列&#xff0c;需要带文件后缀&#xff0c;为txt文件就是.txt结尾&#xff0c;为png图片…

数据结构-排序(来自于王道)

排序的基本概念 插入排序 在这个算法中&#xff0c;除了输入的数组本身&#xff0c;没有使用额外的数据结构来存储数据&#xff0c;所有的操作都是在原数组上进行的。因此&#xff0c;无论输入数组的大小 n 是多少&#xff0c;算法执行过程中所占用的额外空间是固定的&#xff…

MySQL中DELETE、DROP和TRUNCATE的区别是什么?

MySQL中&#xff0c;DELETE、DROP和TRUNCATE是用于数据管理的三个重要命令&#xff0c;但它们之间存在显著的区别。以下是它们的主要差异&#xff1a; 一、用法不同 DROP 用途&#xff1a;用于删除整个表及其结构。语法&#xff1a;DROP TABLE 表名;特点&#xff1a;在执行DRO…

算力介绍与解析

算力&#xff08;Computing Power&#xff09;是指计算机系统在单位时间内处理数据和执行计算任务的能力。算力是衡量计算机性能的重要指标&#xff0c;直接影响计算任务的速度和效率。 算力的分类和单位 a. 基础算力&#xff1a;以CPU的计算能力为主。适用于各个领域的计算。…

SVN(Subversion)教程

SVN&#xff08;Subversion&#xff09;教程&#xff1a;版本控制入门 什么是 SVN&#xff1f; SVN&#xff08;Subversion&#xff09;是一个集中式版本控制系统&#xff0c;用于管理代码、文档等文件的版本历史。它帮助团队协作开发&#xff0c;提供版本跟踪、文件还原和冲…

vite搭建前端工程

vite简介 vite预构建 将非 ESM 规范的代码转换为符合 ESM 规范的代码,另外就是将第三方依赖内部的多个文件合并为一个,减少 http 请求数量 简单来说,vite在一开始将应用中的模块区分为依赖和源码两类 「依赖部分」更多指的是代码中使用到的第三方模块,比如 vue、lodash、r…

【编译器】传统编译器和AI/ML编译器总结

前言 本文总结了传统编译器和AI/ML编译器&#xff0c;可作为学习、研究、研发的参考资料。 1.编译器-GC Clang Clang是一个C、C、Objective-C和Objective-C编程语言的编译器前端。它采用了LLVM作为其后端&#xff0c;由LLVM2.6开始&#xff0c;一起发布新版本。它的目标是提供一…

使用阿里云Certbot-DNS-Aliyun插件自动获取并更新免费SSL泛域名(通配符)证书

进入nginx docker&#xff0c;一般是Alpine Linux系统 1. 依次执行命令: sudo docker-compose exec nginx bashapk updateapk add certbot apk add --no-cache python3 python3-dev build-baseapk add python3 py3-pippip3 install --upgrade pippip3 install certbot-dns-ali…

IMUX6LL嵌入式-Linux开发中的头文件汇总介绍

sys/mman.h 详见 https://blog.csdn.net/wenhao_ir/article/details/144487608 sys/types.h 详见 https://blog.csdn.net/wenhao_ir/article/details/144487608 sys/stat.h 详见 https://blog.csdn.net/wenhao_ir/article/details/144487608 unistd.h 详见 https://blog…