第三十讲:URLConnection和HttpClient使用入门

93
回复
1089304
查看
  [复制链接]

0

主题

0

帖子

-16

安币

限制会员

发表于 2011-4-29 12:31:16 | 显示全部楼层 |阅读模式
本讲内容:URLConnection和HttpClient使用入门
在Android中除了使用WebView控件访问网络以外,还有用代码方式访问网络的方法,代码方式有时候会显得更加灵活。本讲会介绍使用URLConnection对象和HttpClient组件访问网络的方法。而这两种方法和Java Web开发中的使用方式几乎没有区别,而Web开发的相关资料比比皆是,因此有兴趣的同学学完本讲之后可以专门去研究一下HttpClient4.0的内容,以求更深入的学习。
一、分别使用URLConnection和HttpClient访问Google天气服务的例子
这个例子的的目的就是从Google哪里获取郑州的天气预报信息,并显示在TextView中,本讲只会把返回的XML数据显示出来,下一讲我们学XML解析的时候再把这个天气预报做成图文并茂的形式,所以大家先暂时忍耐一下丑陋的界面。
1、新建一个项目 Lesson30_HttpClient ,主Activity的文件名是 MainActivity.java
2、res/layout/main.xml的内容如下:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">

  3. <textview android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/TextView01" android:text="网络连接测试">

  4. <button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/Button01" android:text="使用URLConnection访问GoogleWeatherAPI">
  5. </button>

  6. <button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/Button02" android:text="使用HttpClient访问GoogleWeatherAPI">
  7. </button>

  8. <scrollview android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/ScrollView01">
  9.         <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/TextView02">
  10.         </textview>
  11. </scrollview>
  12. </textview></linearlayout>
复制代码
3、MainActivity.java的内容如下:
  1. package android.basic.lesson30;

  2. import java.io.InputStreamReader;
  3. import java.net.HttpURLConnection;
  4. import java.net.URL;

  5. import org.apache.http.client.ResponseHandler;
  6. import org.apache.http.client.methods.HttpGet;
  7. import org.apache.http.impl.client.BasicResponseHandler;
  8. import org.apache.http.impl.client.DefaultHttpClient;

  9. import android.app.Activity;
  10. import android.os.Bundle;
  11. import android.view.View;
  12. import android.widget.Button;
  13. import android.widget.TextView;
  14. import android.widget.Toast;

  15. public class MainActivity extends Activity {

  16.         TextView tv;

  17.         String googleWeatherUrl1 = "http://www.google.com/ig/api?weather=zhengzhou";
  18.         String googleWeatherUrl2 = "http://www.google.com/ig/api?hl=zh-cn&weather=zhengzhou";

  19.         /** Called when the activity is first created. */
  20.         @Override
  21.         public void onCreate(Bundle savedInstanceState) {
  22.                 super.onCreate(savedInstanceState);
  23.                 setContentView(R.layout.main);

  24.                 // 定义UI组件
  25.                 Button b1 = (Button) findViewById(R.id.Button01);
  26.                 Button b2 = (Button) findViewById(R.id.Button02);
  27.                 tv = (TextView) findViewById(R.id.TextView02);

  28.                 // 设置按钮单击监听器
  29.                 b1.setOnClickListener(new View.OnClickListener() {
  30.                         @Override
  31.                         public void onClick(View v) {
  32.                                 // 使用URLConnection连接GoogleWeatherAPI
  33.                                 urlConn();
  34.                         }
  35.                 });

  36.                 // 设置按钮单击监听器
  37.                 b2.setOnClickListener(new View.OnClickListener() {
  38.                         @Override
  39.                         public void onClick(View v) {
  40.                                 // 使用HttpCient连接GoogleWeatherAPI
  41.                                 httpClientConn();

  42.                         }
  43.                 });

  44.         }

  45.         // 使用URLConnection连接GoogleWeatherAPI
  46.         protected void urlConn() {

  47.                 try {
  48.                         // URL
  49.                         URL url = new URL(googleWeatherUrl1);
  50.                         // HttpURLConnection
  51.                         HttpURLConnection httpconn = (HttpURLConnection) url.openConnection();

  52.                         if (httpconn.getResponseCode() == HttpURLConnection.HTTP_OK) {
  53.                                 Toast.makeText(getApplicationContext(), "连接Google Weather API成功!",
  54.                                                 Toast.LENGTH_SHORT).show();
  55.                                 // InputStreamReader
  56.                                 InputStreamReader isr = new InputStreamReader(httpconn.getInputStream(), "utf-8");
  57.                                 int i;
  58.                                 String content = "";
  59.                                 // read
  60.                                 while ((i = isr.read()) != -1) {
  61.                                         content = content + (char) i;
  62.                                 }
  63.                                 isr.close();
  64.                                 //设置TextView
  65.                                 tv.setText(content);
  66.                         }
  67.                         //disconnect
  68.                         httpconn.disconnect();

  69.                 } catch (Exception e) {
  70.                         Toast.makeText(getApplicationContext(), "连接Google Weather API失败", Toast.LENGTH_SHORT)
  71.                                         .show();
  72.                         e.printStackTrace();
  73.                 }
  74.         }

  75.         // 使用HttpCient连接GoogleWeatherAPI
  76.         protected void httpClientConn() {
  77.                 //DefaultHttpClient
  78.                 DefaultHttpClient httpclient = new DefaultHttpClient();
  79.                 //HttpGet
  80.                 HttpGet httpget = new HttpGet(googleWeatherUrl2);
  81.                 //ResponseHandler
  82.                 ResponseHandler<string> responseHandler = new BasicResponseHandler();

  83.                 try {
  84.                         String content = httpclient.execute(httpget, responseHandler);
  85.                         Toast.makeText(getApplicationContext(), "连接Google Weather API成功!",
  86.                                         Toast.LENGTH_SHORT).show();
  87.                         //设置TextView
  88.                         tv.setText(content);
  89.                 } catch (Exception e) {
  90.                         Toast.makeText(getApplicationContext(), "连接Google Weather API失败", Toast.LENGTH_SHORT)
  91.                         .show();
  92.                         e.printStackTrace();
  93.                 }
  94.                 httpclient.getConnectionManager().shutdown();
  95.         }
  96. }</string>
复制代码
4、最后别忘了在AndroidManifest.xml中加入访问网络的权限,<uses-permission android:name="android.permission.INTERNET"></uses-permission>5、运行程序查看结果:[/url]  
按第一个按钮的效果,返回的数据结果显示在了TextView里。[url=http://android.yaohuiji.com/wp-content/uploads/2010/08/image310.png]
  
按第二个按钮的效果,返回的数据结果显示在了TextView里, 所不同的是显示的是中文。好了,本讲先到这里。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

0

主题

40

帖子

20

安币

初级码农

Rank: 1

发表于 2011-10-13 22:13:02 | 显示全部楼层
要是有书就好了

0

主题

40

帖子

92

安币

初级码农

Rank: 1

发表于 2012-11-8 09:15:44 | 显示全部楼层
连接Google Weather API失败

0

主题

47

帖子

35

安币

程序猿

Rank: 2

发表于 2011-10-24 23:29:45 | 显示全部楼层
要是有书就好了

0

主题

74

帖子

133

安币

程序猿

Rank: 2

QQ达人

发表于 2011-11-25 17:16:24 | 显示全部楼层
很好啊,学习

0

主题

15

帖子

9

安币

初级码农

Rank: 1

发表于 2011-11-27 13:07:20 | 显示全部楼层
恩,研究一下区别。。。。

0

主题

48

帖子

175

安币

程序猿

Rank: 2

QQ达人

发表于 2011-12-5 11:04:30 | 显示全部楼层
不错,有对比,简单明了~

0

主题

35

帖子

99

安币

程序猿

Rank: 2

QQ达人

发表于 2012-1-4 11:27:01 | 显示全部楼层
{:soso_e179:}

0

主题

71

帖子

56

安币

程序猿

Rank: 2

QQ达人

发表于 2012-1-4 16:14:01 | 显示全部楼层
不错,值得学习
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

领先的中文移动开发者社区
18620764416
7*24全天服务
意见反馈:1294855032@qq.com

扫一扫关注我们

Powered by Discuz! X3.2© 2001-2019 Comsenz Inc.( 粤ICP备15117877号 )