![Android平台应用软件开发课件:Android中的网络访问_第1页](http://file4.renrendoc.com/view11/M03/0B/1E/wKhkGWW4IvWARg_4AAGV8qQNHTs441.jpg)
![Android平台应用软件开发课件:Android中的网络访问_第2页](http://file4.renrendoc.com/view11/M03/0B/1E/wKhkGWW4IvWARg_4AAGV8qQNHTs4412.jpg)
![Android平台应用软件开发课件:Android中的网络访问_第3页](http://file4.renrendoc.com/view11/M03/0B/1E/wKhkGWW4IvWARg_4AAGV8qQNHTs4413.jpg)
![Android平台应用软件开发课件:Android中的网络访问_第4页](http://file4.renrendoc.com/view11/M03/0B/1E/wKhkGWW4IvWARg_4AAGV8qQNHTs4414.jpg)
![Android平台应用软件开发课件:Android中的网络访问_第5页](http://file4.renrendoc.com/view11/M03/0B/1E/wKhkGWW4IvWARg_4AAGV8qQNHTs4415.jpg)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android中的网络访问8.1在Eclipse上搭建服务器8.2Android利用HttpURLConnection 访问网络8.3Android利用HttpClient访问网络8.4Android从服务器下载文件8.5xml的生成与解析8.6JSON的生成与解析8.7服务器与数据库的通信8.8本章项目实战
8.1在Eclipse上搭建服务器
8.1.1搭建服务器环境工具介绍Tomcat是Apache软件基金会Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。
8.1.2工具软件的安装
1.Tomcat的安装
从“开发所需工具”中找到安装软件apache-tomcat-8.0.24-windows-x64.zip压缩文件,解压缩里面的文件到E盘。
2.Tomcat环境变量的配置
右键“我的电脑”→“属性”→“高级系统设置”,切换到高级选项卡,点击“环境变量”,如图8-1所示。图8-1环境变量界面
点击“Administrator的用户变量”一栏的“新建”,在变量名一栏输入“CATALINA_HOME”,在变量值一栏输入“E:\apache-tomcat-8.0.24\bin”,如图8-2所示,点击“确定”,这样,Tomcat的环境变量就配置好了。图8-2新建用户变量界面
8.1.3搭建服务器
在Eclipse工作窗口的右上角区域,找到“OpenPerspective”按钮,点击打开OpenPerspective窗口,选择“JavaEE”,点击“OK”,如图8-3所示。
图8-3选择JavaEE界面
在ProjectExplorer一栏,单击鼠标右键,选择new→DynamicWebProject,弹出如图8-4所示的界面。图8-4选择Tomcat安装路径
在ProjectName一栏输入服务器的名称,比如输入“MyServer”,Targetruntime一栏选择要配置的服务器,点击“NewRuntime”按钮,在弹出的窗口中选择“ApacheTomcatv8.0”,点击“Next”,弹出图8-5所示的界面。图8-5RunOnServer窗口
8.2Android利用HttpURLConnection访问网络
8.2.1HttpURLConnection介绍随着智能手机和平板电脑等移动终端设备的迅速发展,现在的Internet已经不再只是传统的有线互联网,还包括移动互联网。同有线互联网一样,移动互联网也可以使用HTTP访问网络。在Android中,针对HTTP进行网络通信的方法主要有两种:一种是使用HttpURLConnection实现;另一种是使用HttpClient实现。
8.2.2HttpURLConnection的使用方法
1.HttpURLConnection连接URL
(1)创建一个URL对象。
URLurl=newURL();
(2)利用HttpURLConnection对象从网络中获取网页数据。
HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
(3)设置连接超时。
conn.setConnectTimeout(6*1000);
(4)对响应码进行判断。
if(conn.getResponseCode()!=200)//从Internet获取网页,发送请求,将网页以流的形式读回来
thrownewRuntimeException("请求url失败");
(5)得到网络返回的输入流。
InputStreamis=conn.getInputStream();
(6) Stringresult=readData(is,"GBK"); //文件流输入出文件用outStream.write
(7) conn.disconnect();
总结:
①记得设置连接超时,如果网络不好,Android系统在超过默认时间会收回资源中断操作。
②返回的响应码若为200,则成功。
③在Android中对文件流的操作和JAVASE上面是一样的。
④在对大文件操作时,要将文件写到SDCard上面,不要直接写到手机内存上。
⑤对文件流操作完,要记得及时关闭。
2.向Internet发送请求参数
向Internet发送请求参数的步骤如下:
(1)创建URL对象:
URLrealUrl=newURL(requestUrl);
(2)通过HttpURLConnection对象,向网络地址发送请求:
HttpURLConnectionconn=(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)以流的方式输出。
8.2.3使用HttpURLConnection访问服务器
在8.1.3中搭建好的“MyServer”服务器中,依次展开“MyServer”→“JavaResources”,在src目录上单击右键,选择“new”→“Servlet”,在弹出的窗口中,在“Classname”一栏中输入要新建的Servlet的名字,比如输入“MyServlet”,这样,一个Servlet就新建好了,接下来我们要运行服务器,在“MyServer”项目上单击右键,选择“Runas”单击右键“RunOnServer”,服务器的运行就大功告成了,我们还要修改“MyServlet”里的“doGet”方法:
在访问网络的点击事件中,服务器的地址通过getInfoFromServlet(path)传进去,然后通过newURL(path)构建一个URL对象,之后通过url.openConnection()建立一个连接,通过con.getInputStream()得到输入流,然后通过读写这个输入流,最终得到我们需要的字符串
结果。
8.3Android利用HttpClient访问网络
8.3.1HttpClient的介绍在Android开发中,AndroidSDK附带了Apache的HttpClient。HttpClient是一个完善的客户端,提供了对HTTP协议的全面支持,可以使用HttpClient的对象来执行HTTPGET和HTTPPOST调用。
HTTP工作原理:
(1)客户端(一般是指浏览器,这里是指自己写的程序)与服务器建立连接;
(2)建立连接后,客户端向服务器发送请求;
(3)服务器接收到请求后,向客户端发送响应信息;
(4)客户端与服务器断开连接。
HttpClient的一般使用步骤:
(1)使用DefaultHttpClient类实例化HttpClient对象。
(2)创建HttpGet或HttpPost对象,将要请求的URL通过构造方法传入HttpGet或HttpPost对象。
(3)调用execute方法发送HTTPGET或HTTPPOST请求,并返回HttpResponse对象。
(4)通过HttpResponse接口的getEntity方法返回响应信息,并进行相应的处理。
最后记得要在AndroidManifest.xml文件添加网络权限:
8.3.2使用HttpClient来执行GET调用
通过按钮的点击事件执行getInfoFromServlet(path)方法,就可以把服务器的URL传进去,用HttpClientgetClient=newDefaultHttpClient()得到一个HttpClient对象,用HttpGetrequest=newHttpGet(path)得到一个HttpGet对象,用HttpResponseresponse=getClient.execute(request)发起客户端的请求,得到一个服务器的回应“response”,用InputStreamis=response.getEntity().getContent()得到输入流,之后就是从输入流里面得到返回的字符串。使用HttpClient执行GET请求的流程就是这样。
8.3.3使用HttpClient来执行POST调用
使用HTTPGET调用有一个缺点就是,请求的参数作为URL一部分来传递,以这种方式传递的时候,URL的长度应该在2048个字符之内。如果超出这个范围,就要使用HTTPPOST调用。
下面新建一个服务器,命名为“MyServer_6-3-3”,依次展开“MyServer_6-3-3”→“JavaResources”,在src目录上单击右键,选择“new”→“Servlet”。在弹出的窗口中,在“Classname”一栏中输入要新建的Servlet名字,比如输入“MyServlet”,这样一个Servlet就新建好了。
在访问网络的点击事件中,调用getInfoFromServlet(path)方法访问网络,同时把服务器的URL传进去,使用NameValuePair来保存要传递的Post参数,使用UrlEncodedFormEntityformEntity=newUrlEncodedFormEntity(postParameters)把参数放到formEntity中,通过request.setEntity(formEntity)把参数放入请求中,最后通过EntityUtils.toString(response.getEntity())得到服务器返回的字符串。
8.4Android从服务器下载文件
8.4.1从服务器下载图片首先,要在服务器上放一张名为“myimage.jpg”的JPG格式的图片,以便我们进行测试,将图片放在“MyServer”项目的“WebContent”目录结构下,最终结果如图8-6所示。图8-6MyServer项目结构目录界面
可以看到,关键下载代码里用InputStreamis=con.getInputStream()得到输入流,然后用BitmapFactory.decodeStream(is)方法将流转换成一个Bitmap对象,最后用handler将bitmap对象设置在imageview控件上。
8.4.2从服务器下载文件
在“MyServer”服务器的“WebContent”目录下放一个名为”mytext.txt”的文本文档,里面随便输入测试文字,效果如图8-7所示。图8-7MyServer项目结构目录界面
8.5xml的生成与解析8.5.1什么是xmlxml是可扩展标记语言(ExtensibleMarkupLanguage)的缩写,其中的标记是关键部分。用户可以创建内容,然后使用限定标记标记它,从而使每个单词、短语或块成为可识别、可分类的信息。用户创建的文件或文档实例由元素(标记)和内容构成。当从打印输出读取或以电子形式处理文档时,元素能够帮助用户更好地理解文档。元素的描述性越强,文档各部分越容易识别。
8.5.2在服务器端生成xml
在Eclipse中,新建“DynamicWebProject”,命名为“MyServer_6-5”,点击“finish”,完成服务器的创建,搭建服务器的具体步骤可见本章8.1节,之后在服务器上创建名为“MyServlet”的Servlet,完成Servlet的创建,创建Servlet的具体方法请看本章8.3.1节。
我们在这里生成xml数据需要用到dom4j.jar包,这个工具包已经在本书的光盘里携带,当然也可以从网络上搜索并下载dom4j.jar包,有了dom4j.jar包以后,把它复制到服务器项目的“WebContent”→“WEB-INF”→“lib”目录下,右键dom4j.jar包,选择“BuildPath”→“AddToBuildPath”,这样,这个包就算导入到项目里了。
8.5.3在客户端解析xml数据
在Android中常用的xml解析器有三种,分别为DOM解析器、SAX解析器和PULL解析器,下面是PULL解析器的方式。为什么要学习PULL解析器呢?因为PULL解析器是在xml文档中寻找想要的标记,把需要的内容拉入内存,而不是把整个文档都拉入内存,这种方式比较适合手机等内存有限的小型的移动设备。
Android并未提供对JavaStAXAPI的支持。但是,Android附带了一个PULL解析器,其工作方式类似于StAX。它允许用户的应用程序代码从解析器中获取事件,这与SAX解析器自动将事件推入处理程序相反。
PULL解析器的运行方式和SAX类似,都是基于事件的模式。不同的是,在PULL解析过程中返回的是数字,且需要我们自己获取产生的事件然后做相应的操作,而不像SAX那样由处理器触发一种事件的方法,执行代码。
PULL解析器小巧轻便,解析速度快,简单易用,非常适合在Android移动设备中使用,Android系统内部在解析各种xml时也是用PULL解析器,Android官方推荐开发者们使用PULL解析技术。PULL解析技术是第三方开发的开源技术,它同样可以应用于JavaSE开发。
PULL解析器的工作原理:xmlPULL提供了开始元素和结束元素。当某个元素开始时,我们可以调用parser.nextText从xml文档中提取所有字符数据。当解析到一个文档结束时,自动生成EndDocument事件。
常用的xmlPULL的接口和类:
XmlPullParser:xmlPULL解析器是一个在xmlPULLVlAP1中提供了定义解析功能的接口。
XmlSerializer:它是一个接口,定义了xml信息集的序列。
XmlPullParserFactory:这个类用于在xmlPULLV1API中创建xmlPULL解析器。
XmlPullParserException:抛出单一的xmlPULL解析器相关的错误。
8.6JSON的生成与解析
8.6.1什么是JSON
JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。简单地说,JSON可以将JavaScript对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从Web客户机传递给服务器端程序。这个字符串看起来有点儿古怪,但是JavaScript很容易解释它,而且JSON可以表示比“名称/值对”更复杂的结构。
JSON的值可以是:数字(整数或浮点数)、字符串(在双引号中)、逻辑值(true或false)、数组(在方括号中)、对象(在花括号中)。
JSON中有且只有两种结构:对象和数组。
对象:对象在JS中表示为“{}”括起来的内容,数据结构为{key:value,key:value,…}键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为对象.key获取属性值,这个属性值的类型可以是数字、字符串、数组、对象几种。
数组:数组在JS中是中括号“[]”括起来的内容,数据结构为[“java”,“javascript”,“vb”,…],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是数字、字符串、数组、对象几种。
8.6.2JSON在服务端的生成
在Eclipse中,新建“DynamicWebProject”,命名为“MyServer_6-6”,点击“finish”,完成服务器的创建,搭建服务器的具体步骤可见本章8.1节。然后在服务器上创建名为“MyServlet”的Servlet,完成Servlet的创建,创建Servlet的具体方法请看本章8.3.1节。
我们在这里生成JSON数据需要用到gson.jar包,这个工具包已经在本书的光盘里携带,当然也可以从网络上搜索并下载gson.jar包,有了gson.jar包以后,把它复制到服务器项目的“WebContent”→“WEB-INF”→“lib”目录下,右键gson.jar包,选择“BuildPath”→“AddToBuildPath”,这样,这个包就算导入到项目里了。
8.6.3JSON在客户端的解析
AndroidSDK提供了org.json用来解析JSON,在Android3.0又提供了android.util包中的JsonReader和JsonWriter来进行JSON的解析和生成。使用org.json包JSONObject和JSONArray进行JSON解析,我们知道JSON中只有两种结构array和object,因此就只对这两个类进行解析。
8.7服务器与数据库的通信
8.7.1数据库的安装MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言——结构化查询语言(SQL)进行数据库管理。在“开发所需工具”文件夹中,找到“mysql安装包”,解压缩至本地磁盘任意目录,找到解压缩后的“mysql-5.5.15-win32.msi”,双击进行安装,安装界面如图8-8所示。图8-8mysql安装界面
按照如下点击事件进行安装:“Next”→“Next”→“Typical”→“Install”,之后会弹出几个界面,一直点击“Next”,直到出现如图8-9所示界面。图8-9mysql设置默认编码界面
需要注意要把选项切换到最下面的选项“ManualSelectedDefaultCharacterSet/Collation”,把“CharacterSet”设置为“utf8”,然后点击“Next”,直到出现如图8-10所示界面。图8-10设置mysql密码界面
但是到这里并没有结束,我们如果想要操作数据库就只能在cmd的命令行里操作,这样对我们来说太不方便了,现在需要安装一个mysql的管理软件,它是可视化的图形管理界面,极大地方便了人们对于mysql的操作,打开之前解压缩的文件夹,双击解压缩“SQLyog-11.2.7-0.x64.rar”,打开里面的可执行文件,打开如图8-11的安装界面。图8-11SQLyog安装界面
8.7.2服务器与mysql的连接
在mysql中,在菜单栏选择“Database”→“createDatabase”,在“Databasename”一栏输入“mytest”,点击“Create”创建一个数据库,然后选择“mytest”数据库,在右侧的“Query”命令行里输入“CREATETABLEUSER(idINTEGERPRIMARYKEYAUTO_INCREMENT,usernameVARCHAR(20),PASSWORDVARCHAR(20));”按“F9”执行命令,再按“F5”刷新界面,此时可以看到一张名为“user”的表就被新建在了“mytest”数据库中。
我们连接的是mysql数据库,所以需要一个mysql的数据库驱动,在“开发所需工具”文件夹中,找到“mysql-connector-java-5.1.7-bin.jar”这个包,当然我们也可以去mysql的官网上下载,把它复制到服务器目录下的“WebContent”→“WEB-INF”→“lib”文件夹下,右键这个jar包,选择“buildpath”→“AddToBuildPath”,这样,数据库的驱动程序就被添加到我们的项目里。
8.7.3数据库的增、删、改、查语句
1.向数据库增加一条数据
2.向数据库删除和更新数据
3.从数据库查询语句
8.8本章项目实战
8.8.1项目流程分析经过这一章的学习,我们已经掌握了Android访问网络的方法,以及怎样解析生成xml数据和JSON数据,如何搭建服务器,如何搭建数据库,如何实现服务器与数据库的通信。
下面分析大致流程,在进入登录界面以后,用户点击注册按钮,输入用户名密码,点击确定,将用户名密码发送给服务器,服务器接收到客户端发送过来的数据,连接数据库,将用户名密码插入到“user”表里面,注册功能就到这里完成了。其次就是登录,在登录界面,用户输入以前注册过的用户名密码,将用户名密码发送到服务器,服务器将接收到的数据和数据库里的用户名密码进行比对,如果正确,则返回一个代表成功的字段,通知客户端成功登录,客户端跳转到登录成功的界面,这时候用户可以选择做两件事,一是从SD卡选择文件进行上传,二是将之前上传过的文件下载下来。
8.8.2做项目之前的准备
在Eclipse上搭建服务器,命名为“MyServer_6-8”,因为我们项目要用到JSON数据,并且要操作数据库,所以将“mysql-connector-java-5.1.7-bin.jar”和“gson-2.3.1.jar”复制到“WebContent”→“WEB-INF”→“lib”文件夹下,并且右键单击jar包,点击“BuildPath”→“AddToBuildPath”。
打开mysql,首先要新建一个我们项目要用的数据库,点击菜单栏的“Database”→“CreateDatabase”,输入数据库名“cloudroom”,数据库就建立好了。其次需要建两张表,一张表名是“user”,用来存储用户信息,里面包含两个字段,分别是用户名和密码,还有一张表名是“user_file”,主要用来存储用户上传文件的路径。
鼠标左键选中刚刚建好的数据库“cloudroom”,在右侧的“Query”命令行输入“CREATETABLEUSER(idINTEGERPRIMARYKEYAUTO_INCREMENT,usernameVARCHAR(20),PASSWORDVARCHAR(20));”然后按“F9”执行命令,再按“F5”刷新界面,可以看到“user”表已经建好了,再在右侧的“Query”命令行输入“CREATETABLEuser_file(idINTEGERPRIMARYKEYAUTO_INCREMENT,filepathVARCHAR(30),user_idINTEGER(10));”同样的,“user_file”表就建立好了。
8.8.3开始做项目
新建一个Android项目,命名为“study_6-8”,因为考虑到这个项目涉及访问网络、读写SD卡文件的功能,所以先在AndroidManifest.xml里添加权限:
接下来在项目的src目录下新建一个源程序文件,命名为“RegisterActivity”,让它继承“Activity”,重写onCreate方法,来看注册功能的代码,用户想要登录界面必须先要注册,所以,注册界面有三个输入框,分别是“输入注册账号”,“输入密码”,“输入确认密码”,用户在输完三个输入框的内容以后,点击注册按钮,将用户名密码发送到服务器,服务器把用户名密码保存到数据库,完成注册。
其中,sendData是SendDataToService这个工具类的对象,这个工具类的作用就是访问相对应的Servlet。Constant类很简单,是存储服务器IP地址的类:
我们会发现UserTableDao里用于连接数据库的Connection对象conn是通过ConnectionDataBase这个类里面的方法得到的,ConnectionDataB
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度建筑工程质量与安全综合监测服务合同
- 个人聘用合同范本模板
- 农村建房建设合同范例
- 丧葬用品转让合同范例
- 企划合同范本
- 食堂服务外包合同范本
- 燃气施工风险以及管控措施
- 2025年度婚庆婚礼现场娱乐活动策划合同
- 工厂内部承包合同范本
- 装配式住宅产品建议书可行性研究报告备案
- 黑龙江申论真题2021年(乡镇)
- 山体排险合同模板
- 医保专(兼)职管理人员的劳动合同(2篇)
- 特殊感染手术的配合与术后处理课件
- 检验科生物安全工作总结
- 《ESPEN重症病人营养指南(2023版)》解读课件
- 《金属与石材幕墙工程技术规范》jgj1332001-2021112401384
- 即时通讯系统建设方案
- 2024年山东省聊城市东昌府区小升初英语试卷
- 《坚毅:释放激情与坚持的力量》随笔
- 区块链应用操作员技能大赛考试题库大全-下(多选、判断题)
评论
0/150
提交评论