当前位置: 首页 > article >正文

【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,也已经同步到同名博客中。

写在最后:

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


http://www.kler.cn/a/430455.html

相关文章:

  • Web安全 - “Referrer Policy“ Security 头值不安全
  • 金融租赁系统的创新与发展推动行业效率提升
  • C语言——字符函数和内存函数
  • AfuseKt1.4.4 | 刮削视频播放器,支持阿里云盘和自动海报墙
  • 数字PWM直流调速系统设计(论文+源码)
  • 【图像处理】OpenCv + Python 实现 Photoshop 中的色彩平衡功能
  • 如何判断一个值是否是数组
  • QT requested database does not belong to the calling thread.线程中查询数据报错
  • OpenCV相机标定与3D重建(10)眼标定函数calibrateHandEye()的使用
  • go语言的成神之路-标准库篇-fmt标准库
  • 力扣刷题TOP101: 27.BM34 判断是不是二叉搜索树
  • Erlang/OTP绿色版安装和RabbitMQ绿色版安装
  • 如何制作“优美”PPT
  • 【从零开始的LeetCode-算法】383. 赎金信
  • 《Vue进阶教程》第二课:为什么提出组合式API
  • 证书监控续签工具
  • 机器学习(4)Kmeans算法
  • 助推县域客运转型升级!合江荣程运业上线苏州金龙新V系纯电客车
  • TCP Robot Send Recive
  • Apache Echarts和POI
  • 在Vue.js中生成二维码(将指定的url+参数 生成二维码)
  • 大数据算法:初始权重影响对比-BN算法
  • 力扣打卡8:最长上升子序列
  • jenkins邮件的配置详解
  • Java-自动拆箱/装箱/缓存/效率
  • 自然语言处理和大语言模型综述(12.2-12.8)