Android网络编程之Apache接口

一,通过Apache接口访问网络所必须的类

HttpClient

概述

---HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。(摘自百度百科)

成员变量

构造方法

---DefaultHttpClient()

普通方法

---execute()//发送请求,需要一个表示请求方法的对象作为参数,返回一个封装了响应信息的HttpResponse对象

静态方法

HttpGet

概述

---如果HttpClient发送请求时使用该对象作为参数则表示发送的是GET请求,该请求一般用于获取/查询资源信息

---GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连,如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。

成员变量

构造方法

---HttpGet()//构造一个GET请求,需要一个WEB地址作为参数

普通方法

静态方法

HttpResponse

概述

---该类封装了发起Http请求后返回的信息

成员变量

构造方法

---HttpClient.execute()//客户端发送请求后返回该对象实例

普通方法

---getStatusLine()//获得一个封装了"服务器响应请求的状态信息"的对象

---getStatusCode()//通过上述对象获得“服务器的响应码”

---getEntity()//获得服务器响应实体

静态方法

HttpPost

概述

---如果HttpClient发送请求时使用该对象作为参数则表示发送的是POST请求,该请求一般用于更新资源信息

---POST把提交的数据放置在HTTP包的包体中,也就是HttpEntity中

成员变量

构造方法

---HttpPost()//构造一个GET请求,需要一个WEB地址作为参数

普通方法

---setEntity(Params)//设置请求参数

静态方法

NameValuePair

概述

---发送HttpPost请求需要通过该对象封装请求参数,一个该对象代表一个键值对形式的参数

成员变量

构造方法

------new BasicNameValuePair(key,value)

普通方法

静态方法

HttpEntity

概述

---该类用来封装客户端与服务端通信过程中的数据流

成员变量

构造方法

---HttpResponse.getEntity()

---new UrlEncodedFormEntity(params,"utf-8");//封装Post请求的参数和字符集编码,参1是持有NameValuePair参数对象的容器,参二是字符集编码

普通方法

---getContent()//获得服务器返回的数据流

静态方法

---EntityUtils.toString(HttpEntity)//该方法可直接将一个HttpEntity对象中封装的数据流解析成字符串数据

总结

---GET

----1,首先我们需要一个客户端用来连接服务器,new DefaultHttpClient(),2,然后需要告诉客户端我们要访问服务器里的哪个文件并且以哪种方式去访问,new HttpGet(URL)。3,现在就可以连接并访问服务器,HttpClient.execute(HttpGet),服务器会返回它的响应信息,请求方法会自动将这些信息封装到HttpResponse中并返回。数据已经拿到了,至此就没有服务器和客户端卵事了。

---POST

----同上,HttpGet自然是要改成HttpPost。如果你需要向服务器传递参数的话:首先构造封装了参数的对象,new BasicNameValuePair(key,value),一个对象只能保存一组键值对。然后将该对象保存到容器中,new
ArrayList<NameValuePair>().add(参数对象),再将容器封装到HttpEntity中,new new UrlEncodedFormEntity(容器对象,"utf-8")。最后,HttpPost出场包了她们,HttpPost.setEntity(HttpEntity)。

二,通过Apache接口访问网络实例

1,首先在你的服务器里放个用来被访问的web文件

<%@page language="java" import="java.util.*" pageEncoding="utf-8"%>

<html>

<head>

<title>

Http Test

</title>

</head>

<body>

<%

String type = request.getParameter("parameter");

String result = new String(type.getBytes("iso-8859-1"),"utf-8");

out.println("<h1>" + result + "</h1>");

%>

</body>

</html>

2,Android端代码

public class MainActivity extends Activity {

Handler han=new Handler(){

public void handleMessage(android.os.Message msg) {

switch(msg.what){

case 1:

tv.setText(msg.obj.toString());

break;

case 2:

tv.setText(msg.obj.toString());

break;

}

}

};

TextView  tv;

EditText  et;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

tv=(TextView) findViewById(R.id.t1);

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

}

public void get(View view){

String param=et.getText().toString();

if(TextUtils.isEmpty(param)){

param="空";

}

new th1(param);

}

public void post(View view){

String param=et.getText().toString();

if(TextUtils.isEmpty(param)){

param="空";

}

new th2(param);

}

class th1 extends Thread{

String params="";

public th1(String pa){

this.params=pa;

this.start();

}

@Override

public void run() {

// TODO Auto-generated method stub

super.run();

HttpClient client=new DefaultHttpClient();

HttpGet get=new HttpGet("http://11.67.0.58:8080/nihao/map.jsp?parameter="+params);

try {

//发送请求并获取响应信息

HttpResponse request=client.execute(get);

//判断请求是否成功

if(request.getStatusLine().getStatusCode()==HttpStatus.SC_OK){

//请求成功后获取响应实体

HttpEntity entity=request.getEntity();

//解析服务器返回的数据流

InputStream is=entity.getContent();

BufferedReader br=new BufferedReader(new InputStreamReader(is));

StringBuffer sb=new StringBuffer();

String dataLine="";

while((dataLine=br.readLine())!=null){

sb.append(dataLine);

}

Message msg=han.obtainMessage();

msg.what=1;

msg.obj=sb.toString();

han.sendMessage(msg);

br.close();

}

} catch (Exception e) {

// TODO Auto-generated catch block

System.out.println(e.getMessage());

}

}

}

class th2 extends Thread{

String param="";

public th2(String pa){

param=pa;

this.start();

}

@Override

public void run() {

// TODO Auto-generated method stub

super.run();

HttpClient client=new DefaultHttpClient();

HttpPost post=new HttpPost("http://11.67.0.58:8080/nihao/map.jsp");

//构造参数对象

List<NameValuePair> params=new ArrayList<NameValuePair>();

params.add(new BasicNameValuePair("parameter",param));

HttpEntity entity;

try {

entity = new UrlEncodedFormEntity(params,"utf-8");

post.setEntity(entity);

HttpResponse response=client.execute(post);

if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){

InputStream is=entity.getContent();

BufferedReader br=new BufferedReader(new InputStreamReader(is));

StringBuffer sb=new StringBuffer();

String dataLine="";

while((dataLine=br.readLine())!=null){

sb.append(dataLine);

}

Message msg=han.obtainMessage();

msg.what=2;

msg.obj=sb.toString();

han.sendMessage(msg);

br.close();

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

时间: 2024-10-14 20:49:03

Android网络编程之Apache接口的相关文章

android网络编程之pull解析xml

android网络编程之pull解析xml 除了前面介绍过的SAX以及DOM方法,还可以通过Pull对xml文档进行一个解析.Pull解析器的解析方式与SAX非常相似.它提供了类似的事件,使用parser.next()可以进入下一元素并触发相应事件,事件将作为数值代码被发送,因此可以使用一个switch对感兴趣的事件进行选择,然后进行相应的处理,调用parser.nextText()方法可以获取下一个Text类型元素的值. pull解析器特点: *结构简单:一个接口.一个例外.一个工厂就组成了P

Android网络编程之http发送/请求服务

最近在学习Android网络编程的知识,以下是今晚学习的一些心得.与大家共同分享. 在实际的应用开发中很多时候需要app向服务器请求数据,那么app如何发送请求呢?下面的代码就是其中的一种情况,使用HttpURLConnection向服务器发送请求的数据,然后处理服务器返回的数据. 下面的代码只是客户端的一个简答测试代码.还需要在pc上安装一个 tomcat服务器 ,然后将demo中的jsp文件部署到tomcat上,具体的方法百度一下便知. package com.lee.nethttp; im

Android网络编程之Http通信

Android中提供的HttpURLConnection和HttpClient接口可以用来开发HTTP程序.以下是本人在学习中的总结与归纳.1. HttpURLConnection接口    首先需要明确的是,Http通信中的POST和GET请求方式的不同.GET可以获得静态页面,也可以把参数放在URL字符串后面,传递给服务器.而POST方法的参数是放在Http请求中.因此,在编程之前,应当首先明确使用的请求方法,然后再根据所使用的方式选择相应的编程方式.    HttpURLConnectio

Android网络编程之Socket通信

Socket(套接字)是一种通信机制,可以实现单机或跨网络进行通信,其创建需要明确的区分C(客户端)/S(服务器端),支持多个客户端连接到同一个服务器.有两种传输模式: 1).面向连接的传输:基于TCP协议,可靠性高,但效率低: 2).面向无连接的传输:基于UDP协议,可靠性低,但效率高: Android中,直接采用Socket通信应该是我们遇到的最低级的网络运用.尽管已经作了很大程度的抽象,但是纯粹的Socket通信,仍然给开发者留下很多细节需要处理,尤其在服务器端,开发者需要处理多线程以及数

android网络编程之HttpUrlConnection的讲解--实现文件断点下载

1.没有实现服务器端,下载地址为网上的一个下载链接. 2.网络开发不要忘记在配置文件中添加访问网络的权限 <uses-permission android:name="android.permission.INTERNET"/> 3.网络请求.处理不能在主线程中进行,一定要在子线程中进行.因为网络请求一般有1~3秒左右的延时,在主线程中进行造成主线程的停顿,对用户体验来说是致命的.(主线程应该只进行UI绘制,像网络请求.资源下载.各种耗时操作都应该放到子线程中). 4.断点

android网络编程之HttpUrlConnection的讲解--GET请求

1.服务器后台使用Servlet开发,这里不再介绍. 2.网络开发不要忘记在配置文件中添加访问网络的权限 <uses-permission android:name="android.permission.INTERNET"/> 3.网络请求.处理不能在主线程中进行,一定要在子线程中进行.因为网络请求一般有1~3秒左右的延时,在主线程中进行造成主线程的停顿,对用户体验来说是致命的.(主线程应该只进行UI绘制,像网络请求.资源下载.各种耗时操作都应该放到子线程中). 4. p

android网络编程之HttpUrlConnection的讲解--上传大文件

1.服务器后台使用Servlet开发,这里不再介绍. 2.网络开发不要忘记在配置文件中添加访问网络的权限 <uses-permission android:name="android.permission.INTERNET"/> 3.网络请求.处理不能在主线程中进行,一定要在子线程中进行.因为网络请求一般有1~3秒左右的延时,在主线程中进行造成主线程的停顿,对用户体验来说是致命的.(主线程应该只进行UI绘制,像网络请求.资源下载.各种耗时操作都应该放到子线程中). 4.传输

核心技术篇:6.android网络编程之json解析

前言:好一段时间没写博客了,说最近挺忙的,感觉像是个借口,每天还是同样的24个小时,每天还是同样的5:30就准时下班,每天晚上还是有大量的空余时间...最直接的原因就是,最近堕落了.脑子里也时常会有很多想法浮现,都是些比较实际的想法,但往往就是浮现那一下,心情激动了一下,心里默默告诉自己,有时间就要这么做...好多想法都被一些其它的诱惑给磨灭掉了,要么是打球.要么是看电影.要么是处理一些乱七八糟的事去了.总之,近段时间,花在技术上的时间很少很少,好好反思下. 前段时间,来了一位新疆的客户,提出了

Android网络编程之WebView【实例解析】

WebView 作用: 可以把一个网页在手机客服端以View的方式显示(实质上是一个网页) MainActivity代码[实例解析] package com.example.webview; import android.os.Bundle; import android.app.Activity; import android.view.KeyEvent; import android.view.Menu; import android.view.Window; import android.