Android使用http協議訪問網路
今天主要介紹兩種方式來通過http協議訪問網路。第一種是使用httpurlconnection,第二種是使用開源框架okhttp來訪問網路,這次只是介紹簡單的使用,適合新手入門學習,後續會增加HttpURLConnection和OkHttp使用的深入學習。
新增網路許可權
因為我們需要訪問網路,所以要新增訪問網路的許可權。程式碼如下
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
使用HttpURLConnection訪問網路
1.首先需要獲取到HttpURLConnection的例項,那麼如何獲取呢?這裡有個一般的方法就是我們可以先建立一個URL,然後傳入網路地址,緊接著呼叫url的openConnection()方法就行了,我們看下程式碼怎麼操作:
URL url = new URL("https://www.baidu.com");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
在此介紹一下關於http請求所使用的方法,一般有兩種方法即post和get,其實很好理解,get表示要從伺服器那裡獲取資料,而post則代表要把資料提交給伺服器,我們這裡以獲取伺服器資料為例。
2.設定http請求的方式以及設定連線超時等資訊
//自由定製
connection.setRequestMethod("GET");
connection.setConnectTimeout(80000);
connection.setReadTimeout(8000);
3.使用getInputStream獲取伺服器返回的輸入流
InputStream stresm = connection.getInputStream();
4.在得到伺服器返回的輸入流之後我們就要對輸入流進行讀取了,在這裡我們使用BufferedReader對輸入流進行讀取,主要的讀取流程如下:
//對返回的輸入流進行讀取
BufferedReader reader = new BufferedReader(new InputStreamReader(stresm));
5.對輸入流讀取完畢之後我們就開始讀取存放在reader當中的字串了,這時我們可以通過呼叫BufferedReader的readLine()方法去除字串,看具體的程式碼實現如下:
StringBuilder response = new StringBuilder();
String line;
while ((line=reader.readLine()) != null){
response.append(line);
}
我們將讀取到的字元流全部存放在了response當中,接下來將其通過toString()方法進行轉換就可以在textview當中進行顯示了。
注意:執行網路操作是一件比較耗時的操作,所以我們應該開啟一個新的執行緒去單獨執行耗時的網路操作,接下來我們開啟一個新的執行緒去執行上述操作,完整程式碼如下:
public void openBaidu(View v){
new Thread(new Runnable() {
@Override
public void run() {
HttpURLConnection connection = null;
BufferedReader reader = null;
//第一步建立httpurlconnection例項
try {
URL url = new URL("https://www.baidu.com");
connection = (HttpURLConnection) url.openConnection();
//自由定製
connection.setRequestMethod("GET");
connection.setConnectTimeout(80000);
connection.setReadTimeout(8000);
//使用getInputStream獲取伺服器返回的輸入流
InputStream stresm = connection.getInputStream();
//對返回的輸入流進行讀取
reader = new BufferedReader(new InputStreamReader(stresm));
StringBuilder response = new StringBuilder();
String line;
while ((line=reader.readLine()) != null){
response.append(line);
}
showData(response.toString());
} catch (java.io.IOException e) {
e.printStackTrace();
}finally {
if (reader!=null){
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (connection != null){
connection.disconnect();
}
}
}
}).start();
}
private void showData(final String s) {
runOnUiThread(new Runnable() {
@Override
public void run() {
mTextView.setText(s);
if (s == null){
System.out.println("this");
}else {
System.out.println("不是");
}
}
});
}
在以上程式碼中我們發現設定文字的時候我們新建了一個showData方法去設定文字,同時在方法中使用了runOnUiThread()方法去執行設定文字的操作,這是為什麼呢?因為在子執行緒中是不允許操作ui執行緒的,所以我們要重新整理ui控制元件的話就必須在主執行緒中進行,通過runOnUiThread我們可以將執行緒從子執行緒切換到主執行緒,這樣就可以進行文字的設定了。
以上就是通過HttpURLConnection訪問網路的操作了,使用httpurlconnection是比較原始的操作,在如今開源盛行的時代,有許多出色的網路通訊庫可以替代原生的HttpURLConnection,我們這裡推薦OkHttp,你一定聽說過它的大名,它已經是Android開發首選的網路通訊庫了,下面我們就來先簡單的認識並且使用一下這個強大的網路通訊庫把!
使用OkHttp
在使用OkHttp之前,我們首先需要在專案中新增OkHttp的庫依賴,需要在app/build.gradle檔案中的dependencies閉包當中新增如下依賴。
compile 'com.squareup.okhttp3:okhttp:3.9.0'
新增如上依賴之後就可以使用OkHttp了,你可以在類中輸入ok,如果你as開啟了程式碼自動提示功能的話就會出現關於OkHttp的各種類了,這就代表我們整合OkHttp成功了。
其實OkHttp的基礎使用還是很簡單的,下面我們來說一下它的簡單使用。
第一:需要首先建立一個OkHttpClient例項。
//使用OkHttp
OkHttpClient client = new OkHttpClient();
我們可以跟httpurlconnection對比一下,這裡不需要先建立一個url物件,那麼我們該怎麼建立url呢?畢竟我們是要訪問網路的,其實OkHttp是需要建立一個Request物件來執行相關操作的。
第二:建立一個Request物件
Request request = new Request.Builder()
.url("https://www.baidu.com")
.build();
以上新增了一個url,接下來我們就可以獲取伺服器的資料了,那麼該如何獲取伺服器的資料呢?其實只需要一行程式碼
第三:獲取伺服器返回的資料
Response response = client.newCall(request).execute();
//此處response就是伺服器返回的資料
當獲取到伺服器的資料之後我們應該對資料進行處理,得到可以設定在textview當中的資料,這裡不需要多麼複雜的實現邏輯,同樣是一行程式碼
String data = response.body().string();
好了,如此一來我們就得到了我們想要的資料了,總體來說使用OkHttp非常的方便,因為它真的很強大。接下來我們看下完整的程式碼
mOpenBaidu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// sendRequestWithHttpURLConnection();
sendRequestWithOkHttp();
}
});
private void sendRequestWithOkHttp() {
//開啟一個新的執行緒執行網路操作
new Thread(new Runnable() {
@Override
public void run() {
//使用OkHttp
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://www.baidu.com")
.build();
try {
Response response = client.newCall(request).execute();
//此處response就是伺服器返回的資料
String data = response.body().string();
showResponse(data);
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
private void showResponse(final String s) {
runOnUiThread(new Runnable() {
@Override
public void run() {
//在這進行ui操作,將結果顯示在介面上
response_text.setText(s);
}
});
}
簡單說一下我的程式碼,這裡我是設定了一個按鈕並且給它新增了點選事件,新建了一個新的方法去執行網路操作,同樣開啟了一個新的執行緒去執行耗時的網路操作,在設定文字的時候和httpurlconnection使用了相同的方法,大家可以兩者對比著來看。
以上就是HttpURLConnection和OkHttp的簡單用法了,因為是基礎應用,本身難度不大,只要多上手親自實踐一下,想必掌握簡單用法很容易!好了,就到這了,歡迎討論,謝謝!
來自一個自學的程式設計師,掃一掃,學習更多!
相關文章
- 網路通訊協議-HTTP協議詳解!協議HTTP
- atitit.網路檔案訪問協議.unc smb nfs ftp http的區別協議NFSFTPHTTP
- Http網路協議包 (快速理解)HTTP協議
- 網路安全網路協議知識點中,http協議是什麼?協議HTTP
- Android HTTP協議請求網路(三)之HttpURLConnection方式AndroidHTTP協議
- Android HTTP協議請求網路(一)之認識探索AndroidHTTP協議
- 網路協議 - TCP/IP、HTTP、HTTPS、HTTP2.0協議TCPHTTP
- 計算機網路之十二:HTTP協議計算機網路HTTP協議
- 網路協議 6 - 路由協議:敢問路在何方?協議路由
- 【網路協議】UDP協議協議UDP
- 極光HTTP之什麼是網路協議HTTP協議
- 網路篇 - http協議從入門到精通HTTP協議
- ios網路協議從http變成httpsiOS協議HTTP
- [服務端與網路]http協議與http狀態碼服務端HTTP協議
- Android 網路程式設計(1):HTTP協議原理Android程式設計HTTP協議
- IP協議(網路層協議)協議
- 網路協議協議
- 使用wireshark學習網路協議協議
- 網路基礎之HTTP協議HTTP協議
- iOS網路基礎 HTTP協議iOSHTTP協議
- 【網路協議】IP協議、ARP協議、RARP協議協議
- HTTP 協議HTTP協議
- [HTTP協議]HTTP協議
- http協議HTTP協議
- 【網路協議】TCP協議簡介協議TCP
- 刨根問底HTTP和WebSocket協議HTTPWeb協議
- 英美啟用《資料訪問協議》,將可便捷呼叫彼此網際網路使用者資料協議
- App內訪問網路請求,要採用 HTTPS 協議報錯APPHTTP協議
- 低功耗4G模組HTTP網路協議應用HTTP協議
- 網路管理協議協議
- web網路協議Web協議
- 網路協議大全協議
- 使用mina解析http協議的使用HTTP協議
- WebSphere配置https協議訪問WebHTTP協議
- nginx配置https協議訪問NginxHTTP協議
- 實現網站由http協議轉為https協議網站HTTP協議
- 網路基礎與協議入門——(1)HTTP協議重點協議HTTP
- RTSP協議、RTMP協議、HTTP協議的區別協議HTTP