【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.pswp.cn/web/62431.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/62431.shtml
英文地址,請注明出處:http://en.pswp.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…