Android网络编程概述

Android网络编程概述


一. Android平台网络API接口

1) java.net.*(标准Java接口)

 java.net.*提供与联网有关的类,包括流、数据包套接字(socket)、Internet协议、常见Http处理等。比如:创建URL,以及URLConnection/HttpURLConnection对象、设置链接参数、链接到服务器、向服务器写数据、从服务器读取数据等通信。这些在Java网络编程中均有涉及。

 2) org.apache接口

对于大部分应用程序而言JDK本身提供的网络功能已远远不够,这时就需要Android提供的Apache HttpClient了。它是一个开源项目,功能更加完善,为客户端的Http编程提供高效、最新、功能丰富的工具包支持。

3) android.net.*(Android网络接口)

常常使用此包下的类进行Android特有的网络编程,如:访问WiFi,访问Android联网信息,邮件等功能。


二. 网络架构主要有两种模式B/S,C/S 

1) B/S就是浏览器/服务器端模式了,通过应用层的HTTP协议通信,不需要特定客户端软件,而是需要统一规范的客户端,简而言之就是Android网络浏览器(如chrome,UcWeb,QQ浏览器等等)访问web服务器端的方式。

 2) C/S就客户端/服务器端模式,通过任意的网络协议通信,需要特定的客户端软件。


三. 服务器端返回客户端的内容有三种方式

a)以HTML代码的形式返回。

b)以XML字符串的形式返回,做Android开发时这种方式比较多。返回的数据需要通过XML解析(SAX、DOM,Pull,等)器进行解析(必备知识)。

c)以json对象的方式返回。


四. Android的网络编程分为2种:1.基于http协议,2.基于socket

1、HTTP协议

1.1 HttpURLConnection连接URL
1) 创建一个URL对象 URL url = new URL(http://www.baidu.com);

2) 利用HttpURLConnection对象从网络中获取网页数据HttpURLConnection conn = (HttpURLConnection) url.openConnection();

3) 设置连接超时conn.setConnectTimeout(6*1000);

4) 对响应码进行判断if (conn.getResponseCode() != 200)  throw new RuntimeException("请求url失败");  //从Internet获取网页,发送请求,将网页以流的形式读回来

5) 得到网络返回的输入流InputStream is = conn.getInputStream();

6) String result = readData(is, "GBK"); //文件流输入出文件用outStream.write
7) conn.disconnect();

总结:
--记得设置连接超时,如果网络不好,Android系统在超过默认时间会收回资源中断操作.
--返回的响应码200,是成功.
--在Android中对文件流的操作和Java SE上面是一样的.
--在对大文件的操作时,要将文件写到SDCard上面,不要直接写到手机内存上.
--操作大文件时,要一遍从网络上读,一遍要往SDCard上面写,减少手机内存的使用.这点很重要,面试经常会被问到.
--对文件流操作完,要记得及时关闭.


1.2 向服务器端发送请求参数
步骤:
1) 创建URL对象: URL realUrl = new URL(requestUrl);
2) 通过HttpURLConnection对象,向网络地址发送请求 HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();

3) 设置容许输出: conn.setDoOutput(true);

4) 设置不使用缓存: conn.setUseCaches(false);
5) 设置使用POST的方式发送: conn.setRequestMethod("POST");
6) 设置维持长连接: conn.setRequestProperty("Connection", "Keep-Alive");
7) 设置文件字符集: conn.setRequestProperty("Charset", "UTF-8");
8) 设置文件长度: conn.setRequestProperty("Content-Length", String.valueOf(data.length));
9) 设置文件类型: conn.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");

10) 设置HTTP请求头: conn.setRequestProperty("Accept","image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*");

11) 设置语言:conn.setRequestProperty("Accept-Language“,"zh-CN");

1.3. 向服务器端发送xml数据(也称为实体Entity)
XML格式是通信的标准语言,Android系统也可以通过发送XML文件传输数据.
1) 将生成的XML文件写入到byte数组中,并设置为UTF-8:byte[] xmlbyte = xml.toString().getBytes("UTF-8");
2) 创建URL对象,并指定地址和参数:URL url = new URL(http://localhost:8080/itcast/contanctmanage.do?method=readxml);
3) 获得链接:HttpURLConnection conn = (HttpURLConnection) url.openConnection();
4) 设置连接超时:conn.setConnectTimeout(6* 1000);
5) 设置允许输出conn.setDoOutput(true);
6) 设置不使用缓存:conn.setUseCaches(false);
7) 设置以POST方式传输:conn.setRequestMethod("POST");           
8) 维持长连接:conn.setRequestProperty("Connection", "Keep-Alive");
9) 设置字符集:conn.setRequestProperty("Charset", "UTF-8");
10) 设置文件的总长度:conn.setRequestProperty("Content-Length", String.valueOf(xmlbyte.length));
11) 设置文件类型:conn.setRequestProperty("Content-Type","text/xml; charset=UTF-8");
12) 以文件流的方式发送xml数据:outStream.write(xmlbyte);
总结:
--我们使用的是用HTML的方式传输文件,这个方式只能传输一般在5M一下的文件.
--传输大文件不适合用HTML的方式,传输大文件我们要面向Socket编程.确保程序的稳定性
--将地址和参数存到byte数组中:byte[] data = params.toString().getBytes();


二、基于Socket通信

  Socket编程比基于URL的网络编程提供了更高的传输效率,更强大的功能和更灵活的控制。在Java中已经是层次最低的网络编程接口,在Java中要直接操作协议中更低的层次,那就只有使用JNI了,那基本属于本地语言的范畴。



三、其它网络相关技术

3.1、Android WebView控件

   在android app 中嵌入网页的形式。

     此外,通过webview可以实现HTML<------->JavaScript<-------->Android Java 交互,访问本地手机硬件。

 例如:

1)   webview.addJavascriptInterface(Object obj, String interfaceName))方法,  让Java方法可以在javascript中被调用;

void addJavascriptInterface( Object obj,  String interfaceName)
Use this function to bind an object to JavaScript so that the methods can be accessed from JavaScript.
2)Java中调用Javascript脚本中的方法

  webview.loadUrl("javascript:show('"+json+"')");//调用js的show方法




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值