虽然在登录系统中使用了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. 8个Python小Tips

    原创: 金牌小编  行走在Python的江湖,那能不收藏一些锦囊妙计,今天分享给大家8个小技巧,希望在实战的时候有帮助! 01. 条件判断   condition=Trueif condition:  ...

  2. 二维数组过滤,根据多个条件获取二维数组中指定的arr

    /** * 二维数组过滤,根据多个条件获取二维数组中指定的arr * @param $data_arr * @param $lm_number * @param $source_type * @par ...

  3. Mac 上有哪些鲜为人知且极大提高效率的工具?

    来源:知乎文章收录于:风云社区SCOEE,提供上千款各类mac软件下载 1. Focus  功能: 屏蔽影响你学习的网站.  同类软件:Self Control, Rescue Time  特点 ...

  4. mysql存储过程造数据取一个基准用户的各种类型都取一条数据作为基准数据,循环插入

    CREATE DEFINER=`user`@`%` PROCEDURE `create_upload_data`(in start_userid integer,in create_counter i ...

  5. flask 安装及基础学习(url_for反转,静态文件引入)

    pip3 install flask pycharm 创建项目 默认的代码解释说明(及开启debug模式) #encoding:utf-8 from flask import Flask #从flas ...

  6. 面向对象【day08】:类的起源与metaclass(二)

    本节内容 1.概述 2.类的起源 3.__new__方法 4.__metaclass__方法 一.概述 前面我们学习了大篇幅的关于类,通过类创建对象,那我们想知道这个类到底是怎么产生的呢?它的一切来源 ...

  7. Java面试题全集(下)转载

    Java面试题全集(下)   这部分主要是开源Java EE框架方面的内容,包括hibernate.MyBatis.spring.Spring MVC等,由于Struts 2已经是明日黄花,在这里就不 ...

  8. mysql安装绑定my.ini

    Windows操作系统中,我们安装Mysql有两个选择: 一是下载MSI点击运行,利用windows系统安装程序的方法按部就班的来安装: 二是下载ZIP,解压出来就能立即使用. 在使用ZIP安装时,安 ...

  9. 开源图片文字识别引擎——Tesseract OCR

    Tessseract为一款开源.免费的OCR引擎,能够支持中文十分难得.虽然其识别效果不是很理想,但是对于要求不高的中小型项目来说,已经足够用了. 文字识别可应用于许多领域,如阅读.翻译.文献资料的检 ...

  10. ruby 中 手动执行job任务

    step1:通过crtk客户端 进入项目主目录 step2:rails c step3:job类名.new.方法名 例:MonthWorkPlanJob.new.perform