Android網路開發

来源:https://www.cnblogs.com/yuzhou1234/archive/2020/03/21/12536493.html
-Advertisement-
Play Games

1. WebView用法 ①佈局文件新建一個WebView,特別註意線性佈局和控制項的寬高都要匹配父控制項 ②代碼中的配置 ③AndroidManifest.xml文件中聲明許可權 2. 使用HTTP協議訪問網路 (1)使用HttpURLConnection 首先學習一個新的控制項ScrollView 由於 ...


1. WebView用法

①佈局文件新建一個WebView,特別註意線性佈局和控制項的寬高都要匹配父控制項

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <WebView
        android:id="@+id/wv_first"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

②代碼中的配置

private WebView wv_first;
wv_first = (WebView) findViewById(R.id.wv_first);

		// getSettings()設置瀏覽器的屬性
		// setJavaScriptEnabled(true)讓WebView支持JavaScript腳本
		wv_first.getSettings().setJavaScriptEnabled(true);

		// setWebViewClient(new WebViewClient())
		// 這段代碼的作用是當我們從一個網頁跳轉到另外一個網頁的時候,目標         // 網頁仍然在WebView中顯示
		// 而不是打開系統瀏覽器
		wv_first.setWebViewClient(new WebViewClient());
		
		//傳入網址,打開網頁
		wv_first.loadUrl("http://www.baidu.com");

③AndroidManifest.xml文件中聲明許可權

<uses-permission android:name="android.permission.INTERNET"/>

2. 使用HTTP協議訪問網路

(1)使用HttpURLConnection

首先學習一個新的控制項ScrollView
由於手機屏幕大小有限,而ScrollView允許我們通過滑動查看手機屏幕外的內容
佈局文件代碼如下:

<ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <TextView
            android:id="@+id/tv_request_text"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </ScrollView>

①新建一個按鈕點擊事件,在按鈕點擊事件里開啟一個子線程,用於訪問網路

@Override
	public void run() {

		URL url;
		HttpURLConnection connection;
		try {
			// 先new出一個URL對象,傳入網路地址
			// 調用openConnection()方法獲取到HttpURLConnection對象
			url = new URL("http://www.baidu.com");
			connection = (HttpURLConnection) url.openConnection();
			// 設置HTTP請求所使用的方法,GET或者POST
			// GET表示從伺服器獲取數據
			// POST表示向伺服器提交數據
			connection.setRequestMethod("GET");
			// 下麵使一些自由的定製,比如設置連接超時,讀取超時的毫秒數,以及伺服器希望得到的一些消息頭
			connection.setConnectTimeout(8000);
			connection.setReadTimeout(8000);
			// 接下來利用輸入流對數據進行讀取
			InputStream is = connection.getInputStream();
			BufferedReader br = new BufferedReader(new InputStreamReader(is));
			StringBuilder response = new StringBuilder();
			String line;
			while ((line = br.readLine()) != null) {
				response.append(line);
			}
			// 讀取數據完畢,接下來將數據傳送到Handler進行顯示
			Message message = new Message();
			message.what = SHOW_REQUEST;
			message.obj = response.toString();
			handler.sendMessage(message);
			//最後關閉HTTP連接
			connection.disconnect();

		} catch (Exception e) {
			e.printStackTrace();
		}

	}

②因為上面代碼中是在子線程中,所以不能顯示在UI上,所以要用Handler機制將伺服器返回的數據傳遞到主線程進行UI顯示,具體實現代碼如下:

@Override
	public void handleMessage(Message msg) {
		if(msg.what==SHOW_REQUEST){
			String response=(String) msg.obj;
			//在這裡進行UI操作將結果顯示到UI上
			tv_request_text.setText(response);
			
		}
		
	}

③AndroidManifest.xml文件中聲明許可權

<uses-permission android:name="android.permission.INTERNET"/>

④主Activity中的代碼如下

// Handler用來處理網路訪問請求之後得到數據的顯示
		MyHandler handler = new MyHandler(tv_request_text);
		// 創建訪問網路的線程對象
		final SendHttpRequestThread request = new SendHttpRequestThread(handler);
		// 設置按鈕點擊事件
		btn_request.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// 開啟線程
				request.start();
			}
		});

(2)使用HTTPClient

①佈局文件不變,開啟的線程內的代碼改為如下:

@Override
	public void run() {
		// 因為HttpClient是一個介面,所以無法直接創建它的對象,一般是用
		HttpClient client = new DefaultHttpClient();
		// 想要發起一條GET請求就創建一個HttpGet對象
		// 並傳入目標網路地址,調用HttpClient的execute()方法傳入HttpGet對象
		HttpGet httpGet = new HttpGet("http://www.baidu.com");
		try {
			// 執行execute()方法後會返回HttpResponse對象,伺服器返回的所有信息就包含在這裡面了
			HttpResponse response = client.execute(httpGet);
			// 接下來取出伺服器返回的狀態碼,如果是200就說明請求和響應都成功了
			if (response.getStatusLine().getStatusCode() == 200) {
				// 請求和響應都成功了,取出返回的具體內容
				// response的getEntity()得到一個HttpEntity對象
				// EntityUtils這個工具類的toString()方法將得到的內容轉化成字元串
				// 傳入"utf-8"的目的是在伺服器返回中文的時候防止亂碼
				HttpEntity entity = response.getEntity();
				String responsetext = EntityUtils.toString(entity, "utf-8");

				// 接下來將數據傳送到Handler進行顯示
				Message message = new Message();
				message.what = SHOW_REQUEST;
				message.obj = responsetext;
				handler.sendMessage(message);

			}
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

②AndroidManifest.xml文件中聲明許可權

③主Activity中的代碼如下

// Handler用來處理網路訪問請求之後得到數據的顯示
		MyHandler handler = new MyHandler(tv_request_text);
		//創建HttpCliect訪問網路的線程對象
		final SendClientRequestThread requestThread=new SendClientRequestThread(handler);
		// 設置按鈕點擊事件
		btn_request.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// 開啟線程
				requestThread.start();
			}
		});

3. 下載Apache阿帕奇搭建Web伺服器

(1) 安裝環境

系統:windows 10 x86

Apache版本:Apache 2.4.29

(2) Apache的下載

第一步:

登錄http://httpd.apache.org/download.cgi 這個地址,2.4.16 ,如下圖位置:

第二步:

進入如下界面後,選擇第一項ApacheHaus,這是個第三方下載平臺,在它的網站下載獨立的Apache會是一個壓縮包另外四個中,第二個也是獨立的Apache下載地址,另外三個是集成開發環境。我這裡選的第一個。

第三步:

在新的界面中,會發現VC9和VC11和VC14字樣,通過閱讀相關內容得知用VS2014編譯的無法在windows xp和server 2003中使用。算是為了相容性好點吧,我這裡選的用VC14編譯的64位Apache,選擇下載至此,下載過程完成!

三.安裝

安裝過程很簡單,因為是壓縮包,所以,先將其解壓包中的 Apache24 解壓到合適的位置

4. 配置httpd.conf文件

找到F:\Apache\httpd-2.4.29-o102n-x86-vc14-r2\Apache24\conf文件,用Notepad++打開,因為Notepad++是比較萬能的記事本軟體,所以用他打開,並且記住行號,以便於下次查找,找到:Define SRVROOT 這一項,將其右方的值改為,當前你Apache安裝存放的目錄地址,如下所示

apache的預設埠是80,如果發現被占用了,修改httpd.conf的如下選項,如下所示

5. 安裝Apache的主服務

溫馨提示:一定要以管理員身份運行,不然會報錯

以管理員的身份運行cmd命令(左下角搜索框搜索命令行,右鍵以管理員模式打開,F:進入指定盤符,cd..進入指定目錄文件),進入apache的bin目錄,執行如下命令

httpd.exe -k install -n androidapache

該命令的意思是,安裝apache服務,並將該服務名稱命名為androidapache(你也可以改成別的),回車。

如下所示

6. 啟動apache服務

在安裝目錄中,找到\bin\ApacheMonitor.exe可執行文件,雙擊運行,桌面右下角會出現圖標,雙擊打開視窗界面,會看到如圖所示:

**點擊start,完成apache的啟動,在瀏覽器中輸入http://localhost:80,出現如下界面,啟動成功 **

7. Apahe服務的卸載

若Apache伺服器軟體不想用了,想要卸載,需要先卸載apache服務(切記,若直接刪除安裝路徑的文件夾,會有殘餘文件在電腦,可能會造成不必要的麻煩)

在CMD命令視窗,輸入如下(建議先停止服務再刪除):

sc delete apache

apache是Apache伺服器的服務名

重點來了*****

①以上是Apache搭建的過程,搭建完成後,我們需要用它創建我們自己的網頁

②進入到Apache的安裝目錄的\htdoc目錄下創建一個data.html文件(自定義),隨便 輸入一些內容

③在瀏覽器中訪問http://127.0.0.1/data.xml

特別註意:127.0.0.1訪問的本機伺服器的ip地址,要想讓別人訪問這個伺服器,必須先查看自己電腦的本機ip,然後將127.0.0.1換成這個ip地址
這樣設置之後就可以直接用上面的TTTP訪問網路的方法直接得到數據


瞭解更多技術文章,歡迎關註我的個人公眾號


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ArcGISRuntime 載入 高德、騰訊、百度地圖 瓦片並顯示。 環境# Visual Studio 2019,dotNet Framework 4.6.1 SDK 支持Windows Win7、8、10 源碼地址 效果# ...
  • 具體要求為: 使用一個二維數組記錄客車售票系統中的所有座位號,併在每個座位號上都顯示有票,然後用戶輸入一個坐標位置,按Enter鍵,即可將該座位號顯示為已售。 首先我定義的輸入格式為:1,2 個人認為主要知識點偽代碼如下 1.字元串分割 char[] separator = { ',' }; spl ...
  • 為了開發規範,有時需要統一響應屬性名稱,.netcore已為我們封裝好了,我們直接用即可。 在StartUp類中ConfigureServices方法中,添加如下代碼: public void ConfigureServices(IServiceCollection services) { serv ...
  • 一、引言 IoC-Invertion of Control,即控制反轉,是一種程式設計思想。 先初步瞭解幾個概念: 依賴(Dependency):就是有聯繫,表示一個類依賴於另一個類。 依賴倒置原則(DIP):設計模式六大原則之一,是一種軟體架構設計原則。 控制反轉(IoC):一種軟體設計原則,上層 ...
  • 2020-03-21 23:14:57 老規矩,只上乾貨不扯淡,不一定最好,但希望能幫到一些人。 系統:Deepin15.11桌面版 工具:STM32CubeIDE 下載安裝: 官網下載:https://www.st.com/content/st_com/en/products/developmen ...
  • 原文鏈接: "https://xiaoheidiannao.com/articles/Clipboard.html" 更多電腦使用技巧可以訪問 "https://xiaoheidiannao.com" 查看哦! 剪貼板是一個很方便的工具,它能讓用戶存放多個 "複製" 或者 "剪切" 的記錄,但重啟電 ...
  • 1.開啟防火牆埠 2.查看服務埠 3.查詢伺服器內外網IP ...
  • 一 Pod安全 1.1 PodSecurityPolicy啟用 為了更精細地控制Pod對資源的使用方式,Kubernetes從1.4版本開始引入了PodSecurityPolicy資源對象對Pod的安全策略進行管理,併在1.1版本中升級為Beta版,到1.14版本時趨於成熟。 若想啟用PodSecu ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...