Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Android學習指南之三十:使用URLConnection和HttpClient訪問網絡的方法

Android學習指南之三十:使用URLConnection和HttpClient訪問網絡的方法

編輯:關於android開發

       上一節講了使用WebView控件訪問網絡的方法,而除這種方法之外,我們還可以使用代碼的方式訪問網絡,代碼方式在很多時候用起來更靈活。本節要講的就是使用URLConnection對象和HttpClient組件訪問網絡的方法。

       實際上URLConnection和HttpClient訪問網絡的方法和Java Web開發中的使用方式幾乎沒什麼區別,而Java Web開發的資料比較多,大家可以在學完本節後去查閱相關資料,深入研究下HttpClient4.0的內容,以學習更多更深的知識。

       分別使用URLConnection和HttpClient訪問Google天氣服務的例子

       這個例子的的目的就是從Google哪裡獲取鄭州的天氣預報信息,並顯示在TextView中,本講只會把返回的XML數據顯示出來,下一講我們學XML解析的時候再把這個天氣預報做成圖文並茂的形式,所以大家先暫時忍耐一下丑陋的界面。

       1、新建一個項目 Lesson30_HttpClient ,主Activity的文件名是 MainActivity.java。

       2、res/layout/main.xml的內容如下:

XML/HTML代碼
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LINEARLAYOUT xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="fill_parent" android:layout_width="fill_parent" android:orientation="vertical">  
  3.   
  4. <TEXTVIEW android:layout_height="wrap_content" android:layout_width="fill_parent" android:text="網絡連接測試" android:id="@+id/TextView01" />  
  5.   
  6. <BUTTON type=submit android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="使用URLConnection訪問GoogleWeatherAPI" android:id="@+id/Button01">  
  7. </BUTTON>  
  8.   
  9. <BUTTON type=submit android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="使用HttpClient訪問GoogleWeatherAPI" android:id="@+id/Button02">  
  10. </BUTTON>  
  11.   
  12. <SCROLLVIEW android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/ScrollView01">  
  13.     <TEXTVIEW android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/TextView02">  
  14.     </TEXTVIEW>  
  15. </SCROLLVIEW>  
  16. </LINEARLAYOUT>  

       3、MainActivity.java的內容如下:

Java代碼
  1. package android.basic.lesson30;   
  2.   
  3. import java.io.InputStreamReader;   
  4. import java.net.HttpURLConnection;   
  5. import java.net.URL;   
  6.   
  7. import org.apache.http.client.ResponseHandler;   
  8. import org.apache.http.client.methods.HttpGet;   
  9. import org.apache.http.impl.client.BasicResponseHandler;   
  10. import org.apache.http.impl.client.DefaultHttpClient;   
  11.   
  12. import android.app.Activity;   
  13. import android.os.Bundle;   
  14. import android.view.View;   
  15. import android.widget.Button;   
  16. import android.widget.TextView;   
  17. import android.widget.Toast;   
  18.   
  19. public class MainActivity extends Activity {   
  20.   
  21.     TextView tv;   
  22.   
  23.     String googleWeatherUrl1 = "http://www.google.com/ig/api?weather=zhengzhou";   
  24.     String googleWeatherUrl2 = "http://www.google.com/ig/api?hl=zh-cn&weather=zhengzhou";   
  25.   
  26.     /** Called when the activity is first created. */  
  27.     @Override  
  28.     public void onCreate(Bundle savedInstanceState) {   
  29.         super.onCreate(savedInstanceState);   
  30.         setContentView(R.layout.main);   
  31.   
  32.         // 定義UI組件   
  33.         Button b1 = (Button) findViewById(R.id.Button01);   
  34.         Button b2 = (Button) findViewById(R.id.Button02);   
  35.         tv = (TextView) findViewById(R.id.TextView02);   
  36.   
  37.         // 設置按鈕單擊監聽器   
  38.         b1.setOnClickListener(new View.OnClickListener() {   
  39.             @Override  
  40.             public void onClick(View v) {   
  41.                 // 使用URLConnection連接GoogleWeatherAPI   
  42.                 urlConn();   
  43.             }   
  44.         });   
  45.   
  46.         // 設置按鈕單擊監聽器   
  47.         b2.setOnClickListener(new View.OnClickListener() {   
  48.             @Override  
  49.             public void onClick(View v) {   
  50.                 // 使用HttpCient連接GoogleWeatherAPI   
  51.                 httpClientConn();   
  52.   
  53.             }   
  54.         });   
  55.   
  56.     }   
  57.   
  58.     // 使用URLConnection連接GoogleWeatherAPI   
  59.     protected void urlConn() {   
  60.   
  61.         try {   
  62.             // URL   
  63.             URL url = new URL(googleWeatherUrl1);   
  64.             // HttpURLConnection   
  65.             HttpURLConnection httpconn = (HttpURLConnection) url.openConnection();   
  66.   
  67.             if (httpconn.getResponseCode() == HttpURLConnection.HTTP_OK) {   
  68.                 Toast.makeText(getApplicationContext(), "連接Google Weather API成功!",   
  69.                         Toast.LENGTH_SHORT).show();   
  70.                 // InputStreamReader   
  71.                 InputStreamReader isr = new InputStreamReader(httpconn.getInputStream(), "utf-8");   
  72.                 int i;   
  73.                 String content = "";   
  74.                 // read   
  75.                 while ((i = isr.read()) != -1) {   
  76.                     content = content + (char) i;   
  77.                 }   
  78.                 isr.close();   
  79.                 //設置TextView   
  80.                 tv.setText(content);   
  81.             }   
  82.             //disconnect   
  83.             httpconn.disconnect();   
  84.   
  85.         } catch (Exception e) {   
  86.             Toast.makeText(getApplicationContext(), "連接Google Weather API失敗", Toast.LENGTH_SHORT)   
  87.                     .show();   
  88.             e.printStackTrace();   
  89.         }   
  90.     }   
  91.   
  92.     // 使用HttpCient連接GoogleWeatherAPI   
  93.     protected void httpClientConn() {   
  94.         //DefaultHttpClient   
  95.         DefaultHttpClient httpclient = new DefaultHttpClient();   
  96.         //HttpGet   
  97.         HttpGet httpget = new HttpGet(googleWeatherUrl2);   
  98.         //ResponseHandler   
  99.         ResponseHandler<STRING> responseHandler = new BasicResponseHandler();   
  100.   
  101.         try {   
  102.             String content = httpclient.execute(httpget, responseHandler);   
  103.             Toast.makeText(getApplicationContext(), "連接Google Weather API成功!",   
  104.                     Toast.LENGTH_SHORT).show();   
  105.             //設置TextView   
  106.             tv.setText(content);   
  107.         } catch (Exception e) {   
  108.             Toast.makeText(getApplicationContext(), "連接Google Weather API失敗", Toast.LENGTH_SHORT)   
  109.             .show();   
  110.             e.printStackTrace();   
  111.         }   
  112.         httpclient.getConnectionManager().shutdown();   
  113.     }   
  114. }</STRING>  

       4、最後別忘了在AndroidManifest.xml中加入訪問網絡的權限:

XML/HTML代碼
  1. <uses-permission android:name="android.permission.INTERNET"></uses-permission>  

       5、運行程序查看結果:

Android學習指南之三十:使用URLConnection和HttpClient訪問網絡的方法

       按第一個按鈕的效果,返回的數據結果顯示在了TextView裡:

Android學習指南之三十:使用URLConnection和HttpClient訪問網絡的方法

       按第二個按鈕的效果,返回的數據結果顯示在了TextView裡, 所不同的是顯示的是中文。

       本節就講到這裡了,相信大家對URLConnection和HttpClient訪問網絡的知識有了初步了解。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved