Android網絡開發

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容許咱們經過滑動查看手機屏幕外的內容
佈局文件代碼以下:html

<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 ,以下圖位置:android

第二步:

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

第三步:

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

三.安裝

安裝過程很簡單,由於是壓縮包,因此,先將其解壓包中的 Apache24 解壓到合適的位置windows

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目錄,執行以下命令app

httpd.exe -k install -n androidapacheide

該命令的意思是,安裝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訪問網絡的方法直接獲得數據


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

相關文章
相關標籤/搜索