在最近几年里,移动互联网已经是一个炙手可热的领域。移动互联网,简单的说,就是互联网的延伸,将互联网从电脑延伸至手机等移动设备上。伴随着智能手机的普及,以及基于智能手机的各种应用和服务的滋生,如今的移动互联网真正意义上进入了高速发展的阶段。而Android作为智能手机的重要平台之一,必然就会有越来越多的Android应用瞄准这个市场。在现有的Android应用中,有很大一部分都是网络相关的应用。所以,学习网络开发是学习Android应用开发的重要部分。
本章会详细介绍在Android平台上进行网络应用的开发的相关知识。首先会详细介绍如何基于Socket和HTTP协议编程。由于网络操作一般都比较耗时,会详细介绍如何使用多线程和异步处理的方式处理网络请求。最后介绍Android客户端与服务器端进行数据交互的一种通用数据格式——JSON数据格式。
Android中网络开发概述
在AndroidSDK中,完全支持JDK本身的TCP、UDP、URL、URLConnection等网络通信的API。同时,AndroidSDK还内置了HttpClient,可以非常方便的发送HTTP请求。
表8-1描述了AndroidSDK中一些与网络有关的package。通过此表可以对Android中网络开发API有一定的了解。
包描述
java.net提供与联网有关的类,包括流和数据包(datagram)sockets、Internet协议和常见HTTP处理。该包是一个多功能网络资源。
java.io包中的类由其他Java包中提供的socket和连接使用。它们还用于与本地文件(在与网络进行交互时会经常出现)的交互。
java.nio包含表示特定数据类型的缓冲区的类。适合用于两个基于Java语言的端点之间的通信。
org.apache.*表示许多为HTTP通信提供精确控制和功能的包。可以将Apache视为流行的开源Web服务器。
android.net除核心java.net.*类以外,包含额外的网络访问socket。该包包括URI类,后者频繁用于Android应用程序开发,而不仅仅是传统的联网方面。
android.net.http包含处理SSL证书的类。
android.net.wifi包含在Android平台上管理有关WiFi(802.11无线Ethernet)所有方面的类。
android.telephony.gsm包含用于管理和发送SMS(文本)消息的类。
表8-1与网络有关的package
在Android平台上实现网络应用,一般有两种方式。
一种是直接基于Socket编程,一般是针对对于实时性要求较高的场合。比如开发实时监控应用,聊天应用等等。
另一种是基于某种成熟的通讯协议。最常用的就是HTTP协议。
下面的章节,会详细介绍如何实现基于Socket的编程和基于HTTP协议的编程。