2024年3月13日发(作者:)
Android移动开发
(慕课版)
11.1 通过HTTP访问网络
随着智能手机和平板电脑等移动终端设备的迅速发展,现在的Internet已经不再只是传统的有线互
联网,它还包括了移动互联网。同有线互联网一样,移动互联网也可以使用HTTP访问网络。在Android
中,针对HTTP进行网络通信的方法主要有两种,一种是使用HttpURLConnection实现,另一种是使
用HttpClient实现,下面分别进行介绍。
11.1.1 使用HttpURLConnection访问网络
HttpURLConnection类位于包中,它用于发送HTTP请求和获取HTTP响应。由于该类
是抽象类,不能直接实例化对象,因而需要使用URL的openConnection()方法来获得。例如,要创建一
个网站对应的HttpURLConnection对象,可以使用下面的代码。
URL url = new URL("/");
HttpURLConnection urlConnection = (HttpURLConnection) nnection();
通过openConnection()方法创建的HttpURLConnection对象,并没有真正的执行连接操
作,只是创建了一个新的实例,在进行连接前,还可以设置一些属性。例如,连接超时的时
间和请求方式等。
创建了HttpURLConnection对象后,就可以使用该对象发送HTTP请求了。HTTP请求通常分为
GET请求和POST请求两种,下面分别进行介绍。
1.发送GET请求
使用HttpURLConnection对象发送请求时,默认发送的就是GET请求。因此,
发送GET请求比较简单,只需要在指定连接地址时,先将要传递的参数通过“?参数名
=参数值”进行传递(多个参数间使用英文半角的逗号分隔,例如,要传递用户名和
E-mail地址两个参数可以使用?user=wgh,email=wgh717@实现),然后获
取流中的数据,并关闭连接就可以了。
下面通过一个具体的实例来说明如何使用HttpURLConnection发送GET请求。
【例11-1】 在Eclipse中创建Android项目,名称为11-1,实现向服务器发送GET请求,并获
取服务器的响应结果。
(1)修改新建项目的res/layout目录下的布局文件activity_,将默认添加的TextView组
件删除,然后将默认添加的相对布局管理器修改为垂直的线性布局管理器,并且在其中添加一个id为
content的编辑框(用于输入微博内容),以及一个“发表”按钮,再添加一个滚动视图,并在该视图中
添加一个线性布局管理器,最后还需要在该线性布局管理器中添加一个文本框,用于显示从服务器上读
取的微博内容,关键代码如下。
android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal" android:orientation="vertical" > 发送GET请求 260 网络技术 第11章 android:id="@+id/content" android:layout_width="match_parent" android:layout_height="wrap_content" />
(2)在该MainActivity中,创建程序中所需的成员变量,具体代码如下。
private EditText content; //声明一个输入文本内容的编辑框对象
private Button button; //声明一个发表按钮对象
private Handler handler; // 声明一个Handler对象
private String result = ""; //声明一个代表显示内容的字符串
private TextView resultTV; //声明一个显示结果的文本框对象
(3)编写一个无返回值的send()方法,用于建立一个HTTP连接,并将输入的内容发送到Web服务
器上,再读取服务器的处理结果,具体代码如下。
public void send() {
String target="";
target = "192.168.1.66:8080/blog/?content="
+base64(t().toString().trim()); //要访问的URL地址
URL url;
try {
url = new URL(target); // 创建URL对象
HttpURLConnection urlConn = (HttpURLConnection) url
.openConnection(); //创建一个HTTP连接
InputStreamReader in = new InputStreamReader(
utStream()); // 获得读取的内容
BufferedReader buffer = new BufferedReader(in); // 获取输入流对象
String inputLine = null;
//通过循环逐行读取输入流中的内容
261


发布评论