上一节讲了使用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访问网络的知识有了初步了解。

本文发布:Android开发网
本文地址:http://www.jizhuomi.com/android/course/210.html
2012年9月19日
发布:鸡啄米 分类:Android开发教程 浏览: 评论:7