本讲内容: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、
运行程序查看结果:

按第一个按钮的效果,返回的数据结果显示在了TextView里。

按第二个按钮的效果,返回的数据结果显示在了TextView里, 所不同的是显示的是中文。好了,本讲先到这里。

URLConnection和HttpClient使用入门的更多相关文章

  1. java学习-GET方式抓取网页(UrlConnection和HttpClient)

    抓取网页其实就是模拟客户端(PC端,手机端...)发送请求,获得响应数据documentation,解析对应数据的过程.---自己理解,错误请告知 一般常用请求方式有GET,POST,HEAD三种 G ...

  2. 《Android学习指南》目录

    源:<Android学习指南>目录 Android学习指南的内容分类: 分类 描述 0.学习Android必备的Java基础知识 没有Java基础的朋友,请不要先看Android的课程,这 ...

  3. 《Android学习指南》文件夹

    转自:http://android.yaohuiji.com/about Android学习指南的内容分类: 分类 描写叙述 0.学习Android必备的Java基础知识 没有Java基础的朋友,请不 ...

  4. 基于开源 Openfire 聊天服务器 - 开发Openfire聊天记录插件[转]

    上一篇文章介绍到怎么在自己的Java环境中搭建openfire插件开发的环境,同时介绍到怎样一步步简单的开发openfire插件.一步步很详细的介绍到简单插件开发,带Servlet的插件的开发.带JS ...

  5. openfire:基于开源 Openfire 聊天服务器 - 开发Openfire聊天记录插件

    基于开源 Openfire 聊天服务器 - 开发Openfire聊天记录插件 上一篇文章介绍到怎么在自己的Java环境中搭建openfire插件开发的环境,同时介绍到怎样一步步简单的开发openfir ...

  6. 基于开源 Openfire 聊天服务器 - 开发Openfire聊天记录插件

    原文:http://www.cnblogs.com/hoojo/archive/2013/03/29/openfire_plugin_chatlogs_plugin_.html 随笔-150  评论- ...

  7. 我的简历 PHP Java C# 技术总监

          石先生 ID:303321266 目前正在找工作 13611326258 hr_msn@163.com 男|32 岁 (1985/08/06)|现居住北京-海淀区|12年工作经验     ...

  8. java实现 HTTP/HTTPS请求绕过证书检测代码实现

    java实现 HTTP/HTTPS请求绕过证书检测代码实现 1.开发需求 需要实现在服务端发起HTTP/HTTPS请求,访问其他程序资源. 2.URLConnection和HTTPClient的比较 ...

  9. asp.net hessian + android hessdroid

    做android开发时你还在为gson,json而人肉序列化与反序列化吗,上传文件时你还在使用UrlConnection或者HttpClient吗?下面提供了asp.net 服务端与 android ...

随机推荐

  1. MatLab 2014a编译jar包时mcc无法使用的问题

    http://blog.csdn.net/heroafei/article/details/43273373 MatLab 2014a编译jar包时mcc无法使用的问题 2015-01-29 16:5 ...

  2. mysql导入数据方法和报错解决

    mysql -u root -p databasename < db.sql 数据库导入数据时,MySQL收到下面异常:ERROR 1153 (08S01): Got a packet bigg ...

  3. HDU - 2639 Bone Collector II (01背包第k大解)

    分析 \(dp[i][j][k]\)为枚举到前i个物品,容量为j的第k大解.则每一次状态转移都要对所有解进行排序选取前第k大的解.用两个数组\(vz1[],vz2[]\)分别记录所有的选择情况,并选择 ...

  4. codeforces 461C

    这题说的是 给了一张长方形的纸 1*n 然后可以按照不同的做法去折这个纸张 他有两种操作,操作1 给了一个pi 点 然后将左边的纸往右边折,第2种操作是给了一个L 和 R 然后计算出 L和R 之间的纸 ...

  5. Python 为什么sys.stdout.write 输出时后面总跟一个数字

    sys.stdout 是标准输出文件.write就是往这个文件写数据. 合起来就是打印数据到标准输出 因为-在交互模式下会输出函数返回值,而write会返回输出的字符数量.在命令行里不会显示

  6. linux常用命令:yum 命令

    用于添加/删除/更新RPM包,自动解决包的依赖问题以及系统更新升级. 1.命令格式:    yum  [参数] [软件名]2.命令功能:    功能:  yum提供了查找.安装.删除某一个.一组甚至全 ...

  7. 用rewrite把旧域名直接跳转到新域名的nginx配置

    用rewrite把旧域名直接跳转到新域名的nginx配置 把下面代码保存到daziran.com.conf 放在nginx配置目录下 /etc/nginx/conf.d/ #把旧域名zdz8207直接 ...

  8. INNODB引擎概述

    INNODB存储引擎的历史概述: INNODB存储引擎是OLTP应用中核心表的首选存储引擎. INNODB存储引擎包含在所有mysql数据库的二进制发行版本中.早期其版本随着mysql数据库的更新而更 ...

  9. SNMP学习笔记之SNMPv3报文认证和加密

    下面主要的内容就是SNMPv3的加密和认证过程! USM的定义为实现以下功能: 鉴别 数据加密 密钥管理 时钟同步化 避免延时和重播攻击 1.UsmSecurityParameters(安全参数) 安 ...

  10. Linux系统安装telnet以及xinetd服务

    Linux系统安装telnet以及xinetd服务 一.安装telnet 1.检测telnet-server的rpm包是否安装 # rpm -qa telnet-server 若无输入内容,则表示没有 ...