虽然在登录系统中使用了Web Service与服务端进行交互。但是在传递大量的数量时,Web Service显得有些笨拙。在本节将介绍移动电子相册中使用的另外一种与数据库交互的方法。直接发送HTTP GET或POST请求。这就要用到HttpGet、HttpPost以及HttpURLConnection这些类。

15.3.1  HttpGet类和HttpPost类

本节将介绍Android SDK集成的Apache HttpClient模块。要注意的是,这里的Apache HttpClient模块是HttpClient 4.0(org.apache.http.*),而不是Jakarta Commons HttpClient 3.x(org.apache.commons.httpclient.*)。

在HttpClient模块中用到了两个重要的类:HttpGet和HttpPost。这两个类分别用来提交HTTP GET和HTTP POST请求。为了测试本节的例子,需要先编写一个Servlet程序,用来接收HTTP GET和HTTP POST请求。读者也可以使用其他服务端的资源来测试本节的例子。

假设192.168.17.81是本机的IP,客户端可以通过如下的URL来访问服务端的资源:

http://192.168.17.81:8080/querybooks/QueryServlet?bookname=开发

在这里bookname是QueryServlet的请求参数,表示图书名,通过该参数来查询图书信息。

现在我们要通过HttpGet和HttpPost类向QueryServlet提交请求信息,并将返回结果显示在TextView组件中。

无论是使用HttpGet,还是使用HttpPost,都必须通过如下3步来访问HTTP资源。

1.创建HttpGet或HttpPost对象,将要请求的URL通过构造方法传入HttpGet或HttpPost对象。

2.使用DefaultHttpClient类的execute方法发送HTTP GET或HTTP POST请求,并返回HttpResponse对象。

3.通过HttpResponse接口的getEntity方法返回响应信息,并进行相应的处理。

如果使用HttpPost方法提交HTTP POST请求,还需要使用HttpPost类的setEntity方法设置请求参数。

本例使用了两个按钮来分别提交HTTP GET和HTTP POST请求,并从EditText组件中获得请求参数(bookname)值,最后将返回结果显示在TextView组件中。两个按钮共用一个onClick事件方法,代码如下:

public void onClick(View view)

{

//  读者需要将本例中的IP换成自己机器的IP

//服务器  :服务器项目  :servlet名称 

String url = "http://192.168.17.81:8080/querybooks/QueryServlet"; 

TextView tvQueryResult = (TextView) findViewById(R.id.tvQueryResult);

EditText etBookName = (EditText) findViewById(R.id.etBookName);

HttpResponse httpResponse = null;

try

{

switch (view.getId())

{

//  提交HTTP GET请求

//doGet():将参数的键值对附加在url后面来传递

case R.id.btnGetQuery:

//  向url添加请求参数

  url += "?bookname=" + etBookName.getText().toString();

//  第1步:创建HttpGet对象

//与HttpPost区别所在,这里是将参数在地址中传递 

HttpGet httpGet = new HttpGet(url);

//  第2步:使用execute方法发送HTTP 

GET请求,并返回HttpResponse对象

httpResponse = new DefaultHttpClient().execute(httpGet);

//  判断请求响应状态码,状态码为200表

示服务端成功响应了客户端的请求

if (httpResponse.getStatusLine().

getStatusCode() == 200)

{

//  第3步:使用getEntity方法获得返回结果

String result = EntityUtils.

toString(httpResponse.getEntity());

//  去掉返回结果中的"\r"字符,

否则会在结果字符串后面显示一个小方格

tvQueryResult.setText(result.replaceAll("\r", ""));

}

break;

//  提交HTTP POST请求

case R.id.btnPostQuery:

//  第1步:创建HttpPost对象

HttpPost httpPost = new HttpPost(url);

//  设置HTTP POST请求参数必须用NameValuePair对象

//与HttpGet区别所在,这里是将参数用List传递

List<NameValuePair> params = new 

ArrayList<NameValuePair>();

params.add(new BasicNameValuePair

("bookname", etBookName.getText(). toString()));

//  设置HTTP POST请求参数

httpPost.setEntity(new 

UrlEncodedFormEntity(params, HTTP.UTF_8));

//  第2步:使用execute方法发送HTTP 

POST请求,并返回HttpResponse对象

httpResponse = new DefaultHttpClient().

execute(httpPost);

if (httpResponse.getStatusLine().

getStatusCode() == 200)

{

//  第3步:使用getEntity方法获得返回结果

String result = EntityUtils.toString

(httpResponse.getEntity());

//  去掉返回结果中的"\r"字符,

否则会在结果字符串后面显示一个小方格

tvQueryResult.setText(result.replaceAll("\r", ""));

}

break;

}

}

catch (Exception e)

{

tvQueryResult.setText(e.getMessage());

}

 HttpGet和HttpPost的区别在于前者是将参数在地址中传递,后者是将参数用List传递。

本文参考与:http://hi.baidu.com/crazygit/item/702eef7a1fd0053e70442358

android 网络编程 HttpGet类和HttpPost类使用详解的更多相关文章

  1. iOS开发——网络编程Swift篇&(八)SwiftyJSON详解

    SwiftyJSON详解 最近看了一些网络请求的例子,发现Swift在解析JSON数据时特别别扭,总是要写一大堆的downcast(as?)和可选(Optional),看?号都看花了.随后发现了这个库 ...

  2. [C#]网络编程系列专题二:HTTP协议详解

    转自:http://www.cnblogs.com/zhili/archive/2012/08/18/2634475.html 我们在用Asp.net技术开发Web应用程序后,当用户在浏览器输入一个网 ...

  3. linux网络编程 ntohs, ntohl, htons,htonl inet_aton等详解

    ntohs =net to host short int 16位 htons=host to net short int 16位 ntohs =net to host long int 32位 hto ...

  4. iOS开发——网络编程Swift篇&(七)NSURLSession详解

    NSURLSession详解 // MARK: - /* 使用NSURLSessionDataTask加载数据 */ func sessionLoadData() { //创建NSURL对象 var ...

  5. 【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介

    Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...

  6. Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介

    Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...

  7. Java 网络编程(四) InetAddress类

    链接地址:http://www.cnblogs.com/mengdd/archive/2013/03/09/2951895.html Java 网络编程(四) InetAddress类 InetAdd ...

  8. 转 Android网络编程之使用HttpClient批量上传文件 MultipartEntityBuilder

    请尊重他人的劳动成果,转载请注明出处:Android网络编程之使用HttpClient批量上传文件 http://www.tuicool.com/articles/Y7reYb 我曾在<Andr ...

  9. Android网络编程只局域网传输文件

    Android网络编程之局域网传输文件: 首先创建一个socket管理类,该类是传输文件的核心类,主要用来发送文件和接收文件 具体代码如下: package com.jiao.filesend; im ...

随机推荐

  1. JavaMail发送邮箱

    package utils; import java.security.GeneralSecurityException; import java.util.Properties; import ja ...

  2. JavaSE_坚持读源码_ClassLoader对象_Java1.7

    ClassLoader java.lang public abstract class ClassLoader extends Object //类加载器的责任就是加载类,说了跟没说一样 A clas ...

  3. awk 处理文本:行转列,列转行

    [root@centos ~]# cat f 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 51 2 3 4 5 awk '{for(i=1;i<=NF;i++)a ...

  4. Java 语言特性

    介绍以下几种语言特性: Java5的特性 1.静态引用 2.可变参数 3.自动装箱和拆箱  包装类的缓存设计 4.枚举 一.静态引用(语法糖,不推荐使用,了解一下即可) 先看看普通的引用,就是impo ...

  5. IE6浏览器的bug问题及相关解决的方法

    IE6浏览器的bug问题及相关解决的方法 1.css浮动边距加倍错误(双倍边距BUG)的解决办法   该错误只影响ie而不影响其他浏览器,我们可以考虑用hack来解决!!!   解决方法:_displ ...

  6. windows cmd命令 批处理bat 导增量jar包【原】

    下载地址 https://pan.baidu.com/s/1cIyCbG 导jar包 @echo off setlocal enabledelayedexpansion echo ---------- ...

  7. dom4j基础教程【转】

    转自 http://blog.csdn.net/whatlonelytear/article/details/42234937 ,但经过大量美化及补充. Dom4j是一个易用的.开源的库,用于XML, ...

  8. LGV 算法 (Lindström–Gessel–Viennot lemma)

    e(ai,bi)为从起点ai到终点bi的方案数.以上矩阵行列式结果就是(a1,a2,...an) 到 (b1,b2,...bn) 的所有不相交路径的种数. 具体证明的话看wiki,比较长.. 这个定理 ...

  9. HDU 1022(火车过站 栈)

    题意是给定火车进站的序列和出站的序列,问能否完成转换,若能输出过程. 和另一道以火车进站为背景的栈应用题类似,但增加了对于过程的输出,只需要多记录一下进出站顺序即可. #include <bit ...

  10. tedu训练营day04

    1.猜拳:import randomlist = ['石头','剪刀','布']y = input('''(0) 石头(1) 剪刀(2) 布请出拳(0/1/2):******************* ...