【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,一经查实,立即删除!

相关文章

ROS学习笔记二:ROS环境搭建

安装ubuntu安装ROS 参考赵虚左老师教程&#xff1a;ROS安装ROS 快速上手体验 -使用命令来实现 –创建工作空间&#xff1a; mkdir -p ros_learn_ws/src// ros_learn_ws为自定义空间 cd ros_learn_ws catkin_make –创建ROS功能包并添加依赖 cd src catkin_create_pkg demo_01 r…

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;两者都可以很好地描…

spring6:4、原理-手写IoC

目录 4、原理-手写IoC4.1、回顾Java反射4.2、实现Spring的IoC 4、原理-手写IoC 我们都知道&#xff0c;Spring框架的IOC是基于Java反射机制实现的&#xff0c;下面我们先回顾一下java反射。 4.1、回顾Java反射 Java反射机制是在运行状态中&#xff0c;对于任意一个类&#x…

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

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

30天学会Go--第7天 GO语言 Redis 学习与实践

30天学会Go–第7天 GO语言 Redis 学习与实践 文章目录 30天学会Go--第7天 GO语言 Redis 学习与实践前言一、Redis 基础知识1.1 Redis 的核心特性1.2 Redis 常见使用场景 二、安装 Redis2.1 在 Linux 上安装2.2 在 Windows 上安装2.3 使用 Docker 安装 Redis 三、Redis 常用命令…

Vue项目开发 如何实现父组件与子组件数据间的双向绑定?

在 Vue.js 中&#xff0c;实现父组件与子组件数据之间的双向绑定&#xff0c;可以通过以下几种方式。下面我将介绍几种常见的方法&#xff0c;并解释它们的实现原理和适用场景。 1. 使用 v-model 实现双向绑定 v-model 是 Vue.js 中最常见的双向绑定方式&#xff0c;它可以使…

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;高效的…

代码随想录算法训练营day37|动态规划part5

今天的几道题目都比较简单&#xff0c;思路也比较相似&#xff0c;都是利用完全背包。完全背包和01背包的不同点在于完全背包每个元素可以取多次&#xff0c;而01背包只能取1次&#xff0c;所以在dp一维数组遍历时&#xff0c;完全背包仍然要从前往后遍历&#xff0c;并且无论是…

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

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. 运行和测试 五…

为什么 JavaScript 中的 `new` 运算符报错?

在 JavaScript 中&#xff0c;new 运算符通常用于创建一个新对象并调用构造函数来初始化对象。然而&#xff0c;new 运算符可能会引发一些错误&#xff0c;通常是由于以下原因导致的&#xff1a; 构造函数没有正确的定义&#xff1a; 如果使用 new 运算符调用的函数没有正确地定…

霍尔效应电流传感器

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

如何设置Java爬虫的异常处理?

在Java爬虫中设置异常处理是非常重要的&#xff0c;因为网络请求可能会遇到各种问题&#xff0c;如连接超时、服务器错误、网络中断等。通过合理的异常处理&#xff0c;可以确保爬虫的稳定性和健壮性。以下是如何在Java爬虫中设置异常处理的步骤和最佳实践&#xff1a; 1. 使用…

ceph /etc/ceph-csi-config/config.json: no such file or directory

环境 rook-ceph 部署的 ceph。 问题 kubectl describe pod dragonfly-redis-master-0Warning FailedMount 7m59s (x20 over 46m) kubelet MountVolume.MountDevice failed for volume "pvc-c63e159a-c940-4001-bf0d-e6141634cc55" : rpc error: cod…

【计网笔记】习题

物理层 不属于物理层接口规范定义范畴的是&#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…