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訪問網路的方法直接得到數據
瞭解更多技術文章,歡迎關註我的個人公眾號