【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中引用这个配置文件:

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

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

实验小结

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

写在最后:

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

泷羽Sec-星河飞雪-bp验证码爆破

免责声明 学习视频来自 B 站up主泷羽sec&#xff0c;如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识&#xff0c;以下代码、网站只涉及学习内容&#xff0c;其他的都与本人无关&#xff0c;切莫逾越法律红线&#xff0c;否则后果自负。 泷羽sec官网&#xff1a;http…

基础算法——搜索与图论

搜索与图论 图的存储方式2、最短路问题2.1、Dijkstra算法&#xff08;朴素版&#xff09;2.2、Dijkstra算法&#xff08;堆优化版&#xff09;2.3、Bellman-Ford算法2.4、SPFA求最短路2.5、SPFA判负环2.6、Floyd算法 图的存储方式 2、最短路问题 最短路问题可以分为单源最短路…

C#构造函数 析构函数 静态成员(类) 密封类 字段以及属性

每当创建类或结构的实例时&#xff0c;将会调用其构造函数。 类或结构可能具有采用不同参数的多个构造函数。 使用构造函数&#xff0c;程序员能够设置默认值、限制实例化&#xff0c;并编写灵活易读的代码 如果静态构造函数尚未运行&#xff0c;静态构造函数会在任何实例构造…

公立医院高质量发展——急慢性气道疾病药学服务科普宣传培训成功开展

2023年&#xff0c;为积极响应国家关于推动公立医院高质量发展的号召&#xff0c;中国健康促进基金会开展了公立医院高质量发展——急慢性气道疾病药学服务科普宣传培训。该项目旨在通过科普宣传和培训&#xff0c;提升咳喘药学规范化服务水平&#xff0c;促进临床专业知识与咳…

product/admin/list?page=0size=10field=jancodevalue=4562249292272

文章目录 1、ProductController2、AdminCommonService3、ProductApiService4、ProductCommonService5、ProductSqlService https://api.crossbiog.com/product/admin/list?page0&size10&fieldjancode&value45622492922721、ProductController GetMapping("ad…

linux介绍------VMWare的卸载,下载,安装------及基础命令使用

文章目录 Linux第一天1、为什么要学习linux&#xff1f;2、怎么去学linux&#xff1f;&#xff08;什么是大数据&#xff09;3、VMWare的卸载&#xff0c;下载&#xff0c;安装4、检查网卡5、创建新的虚拟机&#xff08;安装步骤&#xff1a;看视频&#xff09;6、几个名字的理…

游戏引擎学习第38天

仓库: https://gitee.com/mrxiao_com/2d_game 回顾上次的内容。 我们之前讨论了将精灵放在屏幕上&#xff0c;但颜色错误的问题。问题最终查明是因为使用了一个调整工具&#xff0c;导致文件的字节顺序发生了变化。重新运行“image magic”工具对一些大图像进行重新处理后&am…

leetcode 二进制数转字符串

1.题目要求: 2.题目代码: class Solution { public:string printBin(double num) {string result;double compare_value 1.0;//先给把0和.赋值给result;result.push_back(0);result.push_back(.);while(result.size() < 33){//利用十进制转换成二进制的方法//1.先给num …

JS进阶DAY3|页面加载事件和页面滚动事件

目录 一、页面加载事件 1.1 DOMContentLoaded 事件 1.1.1 触发时机 1.1.2 用途 1.1.3 代码示例document.addEventListener(DOMContentLoaded, (event) > { 1.2 load 事件 1.2.1 触发时机 1.2.2 用途 1.2.3 代码示例 二、页面滚动事件 1.1 scroll事件 1.1.1 触…

overleaf 写论文 语法笔记

1.找参考的期刊/论文模板 注册账户后并登录后进入这个界面&#xff0c;创建的所有历史项目会在这个界面显示&#xff0c;后期可以继续修改。 创建新项目&#xff1a;点击绿色按钮“创建新项目”后&#xff0c;可以新建空白项目&#xff0c;可以选择模板直接往模板里添加内容,…

OpenCV-平滑图像

二维卷积(图像滤波) 与一维信号一样&#xff0c;图像也可以通过各种低通滤波器&#xff08;LPF&#xff09;、高通滤波器&#xff08;HPF&#xff09;等进行过滤。LPF 有助于消除噪音、模糊图像等。HPF 滤波器有助于在图像中找到边缘。 opencv 提供了函数 **cv.filter2D()**&…

Pandas | skill | 将groupby分组后的数据使用堆叠图像展示

groupby堆叠图 计算商品名称和销售数量计算商品名称和销售总额在每个颜色段上标注商品名称和平均销售金额 计算商品名称和销售数量 # 筛选出四个类别下的商品数据 categories_of_interest [Clothing, Accessories, Footwear, Outerwear] # data[Category]列中的元素是否在cat…

selenium常见接口函数使用

博客主页&#xff1a;花果山~程序猿-CSDN博客 文章分栏&#xff1a;测试_花果山~程序猿的博客-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&#xff0c;一起成长&#xff01; 目录 1. 查找 查找方式 css_s…

vue-router查漏补缺

一、动态路由匹配 1.带参数的动态路由匹配 import User from ./User.vue// 这些都会传递给 createRouter const routes [// 动态字段以冒号开始{ path: /users/:efg, component: User }, ]这种方式的路由会匹配到/users/abc或者/users/123,路径参数用冒号:表示&#xff0c;并…

深度和法线纹理

屏幕后期处理效果的基本原理就是当游戏画面渲染完毕后通过获取到该画面的信息进行额外的效果处理 之前的边缘检测、高斯模糊、Bloom、运动模糊等效果都是基于获取当前屏幕图像中的像素信息进行后期处理的 如果仅仅根据像素信息来进行一些效果处理&#xff0c;存在以下问题&…

Vue3小兔鲜电商项目

创建项目 npm install 装包 创建文件夹 git工具管理项目 基于create-vue创建出来的项目默认没有初始化git仓库&#xff0c;需要我们手动初始化 执行命令并完成首次提交&#xff1a; git init git add . git commit -m "init"

短视频矩阵系统SEO优化排名技术的源码搭建与实施:

在开发短视频SEO优化排名技术时&#xff0c;虽然初步观察可能让人认为仅通过get和set这两个代理&#xff08;trap&#xff09;就能实现&#xff0c;但实际操作中远不止如此。为了更全面地控制私有属性的访问权限&#xff0c;还需要实现has、ownKeys以及getOwnPropertyDescripto…

Ubuntu中安装配置交叉编译工具并进行测试

01-下载获取交叉编译工具的源码 按照博文 https://blog.csdn.net/wenhao_ir/article/details/144325141的方法&#xff0c;把imx6ull的BSP下载好后&#xff0c;其中就有交叉编译工具。 当然&#xff0c;为了将来使用方便&#xff0c;我已经把它压缩并传到了百度网盘&#xff…

Fiddler 5.21.0 使用指南:过滤浏览器HTTP(S)流量下(四)

概述 在上一篇文章中&#xff0c;我们介绍了一部分简单的过滤功能&#xff0c;已经可以帮助我们较为准确的定位到感兴趣的请求&#xff1b;提升我们的工作效率&#xff0c;我们可以通过设置更为复杂的过滤规则&#xff0c;精准到定位的我们想要的请求和响应信息。专注于分析对…

错题:Linux C语言

题目&#xff1a;手写代码&#xff1a;判断一个数&#xff08;int类型的整数&#xff09;中有有多少1 题目&#xff1a;手写代码&#xff1a;判断一个数(转换成二进制表示时)有几个1 #include <stdio.h> int main(int argc, const char *argv[]) { //判断一个数&#xf…