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
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...