【Android Studio】学习——网络连接

实验:Android网络连接

文章目录

  • 实验:Android网络连接
    • @[toc]
    • 实验目标和实验内容:
      • 1、掌握Android联网的基本概念;
      • 2、能够使用URL connection实现网络连接;
      • 3、掌握第三方库的基本概念
      • 4、需实现的具体功能
    • 实验结果
      • 功能说明与核心代码
        • HTTPRrequestActivity.java文件结构:
        • StreamMediaActivity.java文件结构:
    • 实验过程
      • 1.网页请求
        • 原生方式(使用HttpURLConnection)
        • 第三方库方法(使用OkHttpClient):
      • 2.图片请求
        • 原生方式(使用HttpURLConnection):
        • 第三方库方法(使用OkHttpClient):
      • 3.流媒体
        • 原生方式(使用VideoView):
      • 第三方库方法(使用ExoPlayer):
      • 问题及解决
    • 实验小结

实验目标和实验内容:

1、掌握Android联网的基本概念;

网络权限

在 Android 应用中,需要在 AndroidManifest.xml 文件中声明网络权限,以允许应用访问网络。

常见的网络权限有 INTERNET 和 ACCESS_NETWORK_STATE。

网络请求

Android 应用通常使用 HTTP 协议进行网络请求。可以使用 HttpURLConnection、OkHttp、Retrofit 等库来发送请求和接收响应。

异步处理

由于网络请求可能会花费一些时间,通常需要在非主线程(如使用 AsyncTask、Thread、ExecutorService 或 Kotlin 的协程)中执行网络请求,以避免阻塞主线程导致应用无响应。

数据解析

网络请求返回的数据通常是 JSON 或 XML 格式,需要使用 JSONObject、JSONArray、XMLPullParser 或第三方库(如 Gson、Jackson)进行解析。

2、能够使用URL connection实现网络连接;

3、掌握第三方库的基本概念

查看第三方官方文档,能实现基础的网络数据传输操作(文字、图片或流媒体)。在Android开发中,第三方库是指那些不是由Android框架直接提供的,而是由开发者社区、公司或个人开发者创建并维护的代码库。这些库旨在扩展Android的功能,提供额外的工具和组件,帮助开发者更高效地构建应用程序。

4、需实现的具体功能

网页请求,图片请求,实现流媒体。必须采用原生和第三方两种方式完成网络连接。请说明连接的url地址信息,AS需要添加的依赖包、以及关键的代码框架。(请注意,如果第三方库采用了非课程内容,需要介绍第三方库的官网地址以及发布者信息。


实验结果

功能说明与核心代码

HTTPRrequestActivity.java文件结构:

在这里插入图片描述

layout布局文件;

在这里插入图片描述

StreamMediaActivity.java文件结构:

在这里插入图片描述

layout文件布局:

在这里插入图片描述


实验过程

1.网页请求

原生方式(使用HttpURLConnection)

URL地址信息:可以使用任意公开的URL,例如 https://www.baidu.com

依赖包:无需额外依赖,使用Android SDK自带的HttpURLConnection。

关键代码框架:

在这里插入图片描述

运行结果截图:
在这里插入图片描述

第三方库方法(使用OkHttpClient):

URL地址信息:可以使用任意公开的URL,例如https://www.bilibili.com/

依赖包

// OkHttp3 依赖

implementation ‘com.squareup.okhttp3:okhttp:4.9.0’

关键代码框架

在这里插入图片描述

运行结果截图

在这里插入图片描述

2.图片请求

原生方式(使用HttpURLConnection):

URL地址信息:可以使用任意公开的URL,例如 https://gd-hbimg.huaban.com/747c8475499a917e165a162cff6e6df6fe33b0a845048-RrSpEc_fw658webp

依赖包:无需额外依赖,使用Android SDK自带的HttpURLConnection。

关键代码框架

在这里插入图片描述

运行结果截图

在这里插入图片描述

第三方库方法(使用OkHttpClient):

URL地址信息:可以使用任意公开的URL,例如https://gd-hbimg.huaban.com/e3019b5bd5a21a12b49cfb647f3af7932f56f08d15f3f-7iLeVE_fw240webp

依赖包

// OkHttp3 依赖

implementation ‘com.squareup.okhttp3:okhttp:4.9.0’ // 请使用最新版本

关键代码框架

在这里插入图片描述

运行结果截图

在这里插入图片描述

3.流媒体

原生方式(使用VideoView):

URL地址信息:可以使用任意公开的URL,例如 http://vjs.zencdn.net/v/oceans.mp4。

依赖包:无需额外依赖,使用Android SDK自带的关键代码框架。它支持多种格式的视频文件,并且可以播放本地文件系统或网络上的视频文件。

关键代码框架
在这里插入图片描述

运行结果截图;
在这里插入图片描述

第三方库方法(使用ExoPlayer):

URL地址信息:可以使用任意公开的URL,例如https://www.w3schools.com/html/movie.mp4

依赖包

ExoPlayer是一个强大的第三方库,它提供了比原生VideoView更多的功能和更好的性能,特别是在播放自适应视频流时。它需要添加依赖并在项目中进行配置。

// ExoPlayer

implementation ‘com.google.android.exoplayer:exoplayer:2.18.5’ // Use the latest version

//ExoPlayer核心库

implementation ‘com.google.android.exoplayer:exoplayer-core:2.18.5’

关键代码框架

在这里插入图片描述

运行结果截图;

在这里插入图片描述


问题及解决

[!NOTE]

问题出现:

在使用ExoPlayer播放视频时可能遇到了一个ExoPlaybackException异常,具体原因是HttpDataSource$CleartextNotPermittedException,这表明应用尝试通过非加密的HTTP协议访问网络资源,但Android系统出于安全考虑,不允许这种明文传输。

问题解决:

配置网络安全配置文件:可以在应用的res/xml目录下创建或修改network_security_config.xml文件,允许特定的域名使用HTTP。例如:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config><base-config cleartextTrafficPermitted="true"><trust-anchors><certificates src="system" /></trust-anchors></base-config><domain-config cleartextTrafficPermitted="true"><domain includeSubdomains="true">www.w3school.com.cn</domain></domain-config>
</network-security-config>

然后,在AndroidManifest.xml中引用这个配置文件:

<applicationandroid:networkSecurityConfig="@xml/network_security_config"...>...
</application>

‼请注意,允许明文HTTP传输可能会使您的应用和用户的数据面临中间人攻击的风险,因此推荐尽可能使用HTTPS

实验小结

该实验代码已经上传到GitHub,也已经同步到同名博客中。

写在最后:

两眼一睁就又是新的实验报告,深刻怀疑实验报告会自己分裂…

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

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

相关文章

5G中什么是ATG网络?

有人问Air to Ground Networks for NR是怎么回事&#xff1f;这个是R18 NR才引入的。 ATG很多部分和NTN类似中的内容类似。比较明显不同的是&#xff0c;NTN的RF内容有TS 38.101-5单独去讲&#xff0c;而ATG则会和地面网络共用某些band&#xff0c;ATG可以工作在N1/N3/N34/N39…

基础算法--双指针

两数之和 点击&#xff1a;题目链接 解法一&#xff1a;暴力解法 时间复杂度&#xff1a;O(N^2) 算法思路&#xff1a;两层for循环即可列出所有两个数字的组合&#xff0c;判断是否等于目标值 算法流程&#xff1a; 两层 for 循环&#xff1a; 外层 for 循环依次枚举第⼀个…

什么是Linux系统架构?

​ Linux系统架构是指Linux操作系统的整体结构和工作层次&#xff0c;它定义了系统组件如何交互、如何管理硬件资源&#xff0c;以及用户如何通过不同的层次与系统进行交互。Linux架构通常有两种划分方法&#xff1a;系统层次架构和功能层次架构&#xff0c;两者都可以很好地描…

不是“我应该做什么”,而是“我想做什么”

1. 识别内心的渴望 首先&#xff0c;我们需要识别自己真正的愿望和激情所在。这可能需要一些时间和自我反思。问自己&#xff1a;在没有任何外界压力的情况下&#xff0c;我真正想做的是什么&#xff1f;是赚钱、生活、旅行、追星&#xff0c;还是其他什么&#xff1f;识别这些…

React第十七章(useRef)

useRef 当你在React中需要处理DOM元素或需要在组件渲染之间保持持久性数据时&#xff0c;便可以使用useRef。 import { useRef } from react; const refValue useRef(initialValue) refValue.current // 访问ref的值 类似于vue的ref,Vue的ref是.value&#xff0c;其次就是vu…

【C++】内存分布、new、delete、 operator new、operator delete

内存分布 在C语言和C中&#xff0c;程序内存被划分成六个部分&#xff1a; 内核空间、栈、内存映射段、堆、数据段、代码段 栈&#xff1a;又称堆栈&#xff0c;主要为非静态局部变量、函数参数、返回值等&#xff0c;栈的生长方向是向下生长的 内存映射段&#xff1a;高效的…

混合云策略在安全领域受到青睐

Genetec 发布了《2025 年物理安全状况报告》&#xff0c;该报告根据超过 5,600 名该领域领导者&#xff08;其中包括 100 多名来自澳大利亚和新西兰的领导者&#xff09;的回应&#xff0c;揭示了物理安全运营的趋势。 报告发现&#xff0c;澳大利亚和新西兰的组织采用混合云策…

FastAPI解决跨域报错net::ERR_FAILED 200 (OK)

目录 一、跨域问题的本质 二、FastAPI中的CORS处理 1. 安装FastAPI和CORS中间件 2. 配置CORS中间件 3. 运行FastAPI应用 三、解决跨域报错的步骤 四、案例:解决Vue.js与FastAPI的跨域问题 1. Vue.js前端应用 2. FastAPI后端API 3. 配置CORS中间件 4. 运行和测试 五…

霍尔效应电流传感器

适用于大电流&#xff0c;低功耗的电流检测&#xff1a; TVS选型: RS232的隔离电路: 单片机采集200伏高压 如何做隔离电路&#xff1a; 采用线性光电耦合器HCNR200实现高压直流母线电压的精确采样。还是用电阻分压&#xff0c;只是在ADC检测阶段加上隔离芯片&#xff1a;

【计网笔记】习题

物理层 不属于物理层接口规范定义范畴的是&#xff08;C&#xff09; A. 接口形状 B. 引脚功能 C. 物理地址 D. 信号电平 【2023-912】光网络只能通过导向型介质传播。&#xff08;&#xff09; 【2017-408】若信道在无噪声情况下的极限数据传输速率不小于信噪比为30dB条件下的…

最新 AI 编程工具全面对比:v0、Bolt.new、Cursor、Windsurf

随着人工智能的快速发展&#xff0c;越来越多的 AI 驱动的开发工具应运而生&#xff0c;旨在提升开发效率、优化开发流程&#xff0c;并减轻开发者的工作负担。在这个背景下&#xff0c;四款新兴的 AI 编程工具&#xff1a;v0、Bolt.new、Cursor 和 Windsurf&#xff0c;各具特…

【C++算法】35.位运算_两整数之和

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a; 题目链接&#xff1a; 371. 两整数之和 题目描述&#xff1a; 解法 笔试的话直接 return ab&#xff1b; 接下来讲一下这题的解法&#xff1a; 位运算&#xff08;异或运算-无进位相加&#xff…

PyCharm+Selenium+Pytest配置小记

1、下载ChromeDriver&#xff1a; Chrome130以后的Driver下载&#xff1a; Chrome for Testing availabilityhttps://googlechromelabs.github.io/chrome-for-testing/ &#xff08;1&#xff09;查看自己Crome浏览器的版本&#xff1a;设置-->关于 Chrome&#xff1b; &…

如何在UI自动化测试中创建稳定的定位器?

如何在UI自动化测试中创建稳定的定位器&#xff1f; 前言1. 避免使用绝对路径2. 避免在定位器中使用索引3. 避免多个类名的定位器4. 避免动态和自动生成的ID5. 确保定位器唯一6. 处理隐藏元素的策略7. 谨慎使用基于文本的定位器8. 使用AI创建稳定的定位器 总结 前言 在自动化测…

明日宣讲 香港科技大学广州|数据科学与分析学域硕博招生宣讲会【湖南大学专场】

&#x1f4e3;&#x1f4e3;&#x1f4e3;明日宣讲 香港科技大学广州&#xff5c;数据科学与分析学域硕博招生宣讲会【湖南大学专场】 时间&#xff1a;2024年12月10日&#xff08;星期二&#xff09;15:00 地点&#xff1a;湖南大学信息科学与工程学院624会议室 报名链接&…

BurpSuite-8(FakeIP与爬虫审计)

声明&#xff1a;学习视频来自b站up主 泷羽sec&#xff0c;如涉及侵权马上删除文章 感谢泷羽sec 团队的教学 视频地址&#xff1a;IP伪造和爬虫审计_哔哩哔哩_bilibili 一、FakeIP 1.配置环境 BurpSuite是java环境下编写的&#xff0c;而今天的插件是python编写的&#xff0c…

Qt C++ 显示多级结构体,包括结构体名、变量名和值

文章目录 mainwindow.hmainwindow.cppstructures.hmain.cpp QTreeView 和 QStandardItemModel 来实现。以下是实现这一功能的步骤和示例代码&#xff1a; 定义多级结构体&#xff1a; 假设你有一个多级结构体&#xff0c;如下所示&#xff1a; struct SubStruct {int subValue…

linux基于systemd自启守护进程 systemctl自定义服务傻瓜式教程

系统服务 书接上文: linux自启任务详解 演示系统:ubuntu 20.04 开发部署项目的时候常常有这样的场景: 业务功能以后台服务的形式提供,部署完成后可以随着系统的重启而自动启动;服务异常挂掉后可以再次拉起 这个功能在ubuntu系统中通常由systemd提供 如果仅仅需要达成上述的场…

ros项目dual_arm_pick-place(moveit和gazebo联合仿真)(一)

目录 前言正文创建功能包具体代码运行 总结 前言 dual_arm_pick-place项目中&#xff0c;实现了两套的moveit和gazebo联合仿真。 启动文件分别是bringup_moveit.launch和arm_bringup_moveit.launch。 在这个项目中&#xff0c;我将代码重新创建了一个包&#xff0c;co_simula…

MySQL 索引(B+树)详解

MySQL 索引&#xff08;B树&#xff09;详解 MySQL逻辑架构对比InnoDB与MyISAM存储结构存储空间可移植性、备份及恢复事务支持AUTO_INCREMENT表锁差异全文索引表主键表的具体行数CRUD操作外键 sql优化简介什么情况下进行sql优化sql语句执行过程sql优化就是优化索引 索引索引的优…