`
810364804
  • 浏览: 782895 次
文章分类
社区版块
存档分类
最新评论

Android网络编程概述

 
阅读更多

首先,应该了解的几个问题:

1)Android平台网络相关API接口

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

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

b) Org.apache接口

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

c)Android.net.*(Android网络接口)

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

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

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

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

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

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

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

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


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

一、HTTP协议

基于TCP/IP协议之上的协议

1.1HttpURLConnection连接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) //从Internet获取网页,发送请求,将网页以流的形式读回来

throw new RuntimeException("请求url失败");

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,*/*");

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

conn.setRequestProperty("

conn.setRequestProperty("
11)以流的方式输出.
总结:
--发送POST请求必须设置允许输出
--不要使用缓存,容易出现问题.
--在开始用HttpURLConnection对象的setRequestProperty()设置,就是生成HTML文件头.

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();

1.4 利用Apache的HttpClient实现Android客户端发送实体Entity

以上为直接利用HTTP协议来实现的,其实Android已经集成了第三方开源项目-------org.apache.http.client.HttpClient,可以直接参考它提供的API使用。

HTTP clients encapsulate a smorgasbord of objects required to execute HTTP requests while handling cookies, authentication, connection management, and other features. Thread safety of HTTP clients depends on the implementation and configuration of the specific client.

使用POST方法进行参数传递时,需要使用NameValuePair来保存要传递的参数。另外,还需要设置所使用的字符集。

二、基于Socket通信

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



三、其它网络相关技术

3.1、Android WebView控件

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

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

例如:

1) webview.addJavascriptInterface(Objectobj,StringinterfaceName))方法, 让Java方法可以在javascript中被调用;

<nobr>void</nobr> <nobr><span class="sympad" style="margin-right:2px"><a target="_blank" href="http://write.blog.csdn.net/reference/android/webkit/WebView.html#addJavascriptInterface(java.lang.Object,%20java.lang.String)" style="color:rgb(0,102,153); text-decoration:none">addJavascriptInterface</a></span>(<a target="_blank" href="http://write.blog.csdn.net/reference/java/lang/Object.html" style="color:rgb(0,102,153); text-decoration:none">Object</a>obj,<a target="_blank" href="http://write.blog.csdn.net/reference/java/lang/String.html" style="color:rgb(0,102,153); text-decoration:none">String</a>interfaceName)</nobr>
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方法


3.2基于SOAP协议与Webservice网络交互 ------------KSoap2
简单对象访问协议,简单对象访问协议(SOAP)是一种轻量的、简单的、基于 XML 的协议。

通过第三方提供的架包ksoap2-Android-assembly-2.4-jar-with-dependencies.jar,我们可以向服务器进行请求调用自己需要的服务。

3.3 实现服务器推送

通过建立持久连接的方法,服务器端发送信息给手机Android用户。

方法一:MQTT协议(实例android+php)

1、服务器端需下载安装IBM的Really Small Message Broker (RSMB)(MQTT协议代理),并运行broker;

下载地址:http://www.alphaworks.ibm.com/tech/rsmb

2、PHP服务器端使用SAM 针对MQTT写的PHP库(下载链接为Tokudu PHPMQTT通信项目),其中send_mqtt.php是一个通过POST接收消息并且通过SAM将消息发送给RSMB的PHP脚本;

3、实例下载:

说明:http://tokudu.com/2010/how-to-implement-push-notifications-for-android/

android客户端:https://github.com/tokudu/AndroidPushNotificationsDemo

php服务器端:https://github.com/tokudu/PhpMQTTClient

方法二:XMPP协议(实例android+jsp)

XMPP : The Extensible Messaging and Presence Protocol (可扩展通讯和表示协议) XMPP 以 Jabber 协议为基础,而 Jabber 是即时通讯中常用的开放式协议。

下载地址:http://sourceforge.net/projects/androidpn/files/

解压服务器端,点击bin/run.bat运行,访问:http://127.0.0.1:7070/index.do,就可以看服务器端的管理页面,用这个管理页面,就要向客户端push消息。


方法三:使用APNS (Android Push Notification Service)

http://www.push-notification.org/

APNS (Android Push Notification Service) 是一种在 android 上轻松实现 push notification 的功能的解决方案. 只需申请一个 API Key, 经过简单的步骤即可实现 push notification 的功能.



3.4 PhoneGap

提到移动3G时代网络应用,不得不提一下PhoneGap了。

phonegap利用HTML,CSS,javascript, 支持Android、iPhone,Windows Phone、Palm OS、Sybian....

如果考虑开发一款应用,适用于大多数智能手机,phonegap是可以考虑的开发框架之一。







相关链接:

1.封装一个HTTP请求的辅助类http://blog.csdn.net/ihrthk/article/details/7739834

分享到:
评论

相关推荐

    Android网络编程-网络协议概述.pdf

    Android网络编程-网络协议概述.pdf 学习资料 复习资料 教学资源

    Android网络编程-计算机网络概述.pdf

    Android网络编程-计算机网络概述.pdf 学习资料 复习资料 教学资源

    深入理解Android网络编程技术详解与最佳实践(带书签目录高清完整版).陈文.郭依正.pdf

     全书共11章,分为三个部分:概述篇(第1章)在介绍了Android开发平台后,重点讲解了Android网络程序的功能及开发环境的配置,引领读者走进Android网络编程的大门;实战篇(第2~8章),详细讲解了TCP、UDP、HTTP等...

    《Android C++高级编程——使用NDK》_源码.zip

    《Android C++高级编程——使用NDK》提供了Java原生接口(JNI)的概述、Bionic API、POSIX 线程和套接字、C++支持、原生图形和声音API以及NEON/SIMD优化,在一个游戏应用案例的帮助下,你将学到很多关键技能。...

    《Android多媒体编程从初学到精通》第一章、Android概述

    《Android多媒体编程从初学到精通》第一章、Android概述。Android作为一个开放、开源的移动终端平台,对业界来讲,这意味着,源代码基于Apache 2.0许可进行开放。与开源代码最常采用的GPL 2.0许可不同,Apache 2.0...

    Android 4游戏编程入门经典

     7.1 opengl es概述以及关注它的原因  7.1.1 编程模型:一个比喻  7.1.2 投影  7.1.3 规范化设备空间和视口  7.1.4 矩阵  7.1.5 渲染管道  7.2 开始之前  7.3 glsurfaceview:从2008年开始,事情变得简单了 ...

    android游戏编程入门

    android游戏编程入门 《Android4游戏编程入门经典》是2012年清华大学出版社出版的图书,作者是(美)策希纳(Zechner,M.),无(美)格林(Green,R.)。 第1章 Android,后起之秀 1  1.1 Android简介 1  1.2 版本分裂 3 ...

    APP开发教程 Java Android移动端开发 4、Android UI进阶编程 (1) 共34页.pptx

    Android Drawable 概述 Bitmap & .9.png Shape XML StateListDrawable Android图形编程 类简介 Canvas Paint Typeface

    android开发揭秘PDF

    6.5 Android数据库编程 6.5.1 SQLite简介 6.5.2 SQLite编程详解 6.5.3 SQLiteOpenHelper应用 6.6 数据共享(ContentProviders) 6.7 小结 第7 章多媒体开发 7.1 多媒体开发详解 7.1.1 Open Core 7.1.2 MediaPlayer ...

    Android驱动开发权威指南

    第一篇Android的前世今生——Android概述篇 第1章Android的前世今生 1.1 Android的起源 1.2开放手机联盟 1.3开源与相关协议 1.4系统的升级与发展 第2章Android体系结构 2.1四层空间基本结构 2.1.1 Android系统底层...

    《Google Android 揭秘》(美) W.Frank Ableson 著

    在介绍Android编程的时候,各主题都使用了独立的示例来演示,这些示例也都可单独作为想在Android编程中大展拳脚的编程新手或资深开发者的参考。 本书适合Android开发人员和技术爱好者阅读。如果能从头到尾读完本书...

    Android 初学中阶高阶书籍_集合打包2

    Android系统概述,Android系统的开发综述,Android的Linux内核与驱动程序,Android的底层库和程序,Android的JAVA虚拟机 和JAVA环境,Android的GUI系统,Android的Audio系统,Android的Video 输入输出系统,Android的多媒体...

    Android 初学中阶高阶书籍_集合打包3

    Android系统概述,Android系统的开发综述,Android的Linux内核与驱动程序,Android的底层库和程序,Android的JAVA虚拟机 和JAVA环境,Android的GUI系统,Android的Audio系统,Android的Video 输入输出系统,Android的多媒体...

    《Android应用开发揭秘》附带光盘代码.

     6.5 Android数据库编程  6.5.1 SQLite简介  6.5.2 SQLite编程详解  6.5.3 SQLiteOpenHelper应用  6.6 数据共享(ContentProviders)  6.7 小结  第7 章多媒体开发  7.1 多媒体开发详解  7.1.1 Open Core  ...

    Android编程教程(Mark L. Murphy)Android Programming Tutorials (Mark L. Murphy)

    本书通过一系列40个单独的练习向您展示了Android可以做什么。 它为您提供了动手指导,说明如何使用其他Android书籍中概述的许多技术来构建复杂的Android应用程序。

    Android应用开发揭秘pdf高清版

    《Android应用开发揭秘》内容全面,不仅详细讲解了Android框架、Android组件、用户界面开发、游戏开发、数据存储、多媒体开发和网络开发等基础知识,而且还深入阐述了传感器、语音识别、桌面组件开发、Android游戏...

    android开发入门与实战(下)

    第17章 芝麻开门——Android底层开发和移植概述 17.1 Android原始码下载 17.2 实机测试 17.2.1 NeoFreeRunner介绍 17.2.2 烧录androidfs.jffs2 17.3 Android移植技术概论 17.3.1 Android底层技术的重要性 17.3.2 ...

    Android开发与应用——张荣,原书配套课件

    7.1 Android多线程概述 7.1.1 创建线程 7.1.2 操作线程 7.2 UI线程与非UI线程 7.3 多线程中的常用类 7.3.1 Handler类 7.3.2 AsyncTask类 7.3.3 Timer定时器 7.4 Android多线程通信机制 7.5 小结 ...

    《Android应用开发揭秘》源码

     6.5 Android数据库编程  6.5.1 SQLite简介  6.5.2 SQLite编程详解  6.5.3 SQLiteOpenHelper应用  6.6 数据共享(ContentProviders)  6.7 小结  第7 章多媒体开发  7.1 多媒体开发详解  7.1.1 Open Core  ...

    Android安全攻防指南_攻击RIL无线接口层_编程案例解析实例详解课程教程.pdf

    本章前半部分对 Android RIL 进行概述,并介绍 SMS消息的格式;后半部分则深入探讨如何修改 RIL 的代码,从而对 Android 中 SMS 的实现代码进行模糊测试。阅读本章之后,你将拥有足够的知识对 Android 的 RIL 进行...

Global site tag (gtag.js) - Google Analytics