本章目的在上一章中,我们利用Hibernate Tools完成了Android Model层的建立,依赖Hibernate Tools的强大功能,自动生成了Model层。在本章,我们将继续我们的项目,在Android端完成Http一个访问类,并完成整个请求、处理 Response、反序列化Json的工作。那么首先我们来看下Android的Http访问。 Http, POST or GET?在开始正式设计Http访问类之前,我们必须先了解一些关于Http协议的必要知识。在Http1.1规范中,一共定义了8种方法,在这里与我们有关的是 Get、post两种方法,对大多数程序员来说,大致的意思我们都明白,但能完整理解两种方法的区别和联系的,就不那么容易了。这里作者不去从协议本身去探讨二者区别,只从应用层来讲:
如果你想了解HTTP协议的更多细节,这篇文章写的很详细,值得参考:http://www.cnblogs.com/skynet/archive/2010/05/18/1738301.html
Android的Http访问类http访问类类的部分代码参考了开源的 https://github.com/yusuke 首先我们来看下Android中进行httprequest的全过程 1、根据URL生成成java.net.HttpURLConnection对象 2、设置HttpURLConnection允许返回值 3、设置HttpURLConnection的Header数据(Header数据保存在 Hashmap<String,String> requestHeaders中,从Configration静态类取得) 4、根据不同类型的httpMethod设置HttpURLConnection 的 RequestMethod -----------至此HttpURLConnection生成完毕---------------- 5、通过调用HttpURLConnection.getInputStream()方法实现Http连接 6、将服务器发回来的数据生成为Response对象(此对象由我们封装,表示服务器返回的数据) 7、通过HttpURLConnection.getResponseCode()的值判断此次Http请求是否成功 8、如果成功,HttpURLConnection.getInputStream()即为服务器返回的http流 -----------至此Request请求完毕----------
通过上面的流程,我们可以设计我们的http访问类,最核心的是下面几个类 HttpClientP:处理Http请求,包括重要的httprequest()方法以及设置header等方法 Response:HttpRequest的返回值,包括asDocument(), asJsonArray(), asString()等与取结果流有关方法,以及 getStatusCode()等与取连接状态、头变量相关的方法 Configuration:保存Properties的静态类,设置连接超时时间、重试次数等
下面给出http访问类的主要方法。
服务器端JSON序列化前文已经说过,服务器采用Newtonsoft.JSON来序列化LINQ数据,这里,我们稍微将LinqToJson扩展一下,以适合Android端的GSON反序列化方法。先看代码:
客户端Android采用GSON反序列化有了客户端的Http访问类,我们就可以来访问服务器了,我们采用下面的步骤来进行:
现在我们暂时先使用一个Activity来测试这个连接过程,将所有流程都写入OnCreate()中,暂不考虑其他有更有逻辑的封装。
结果如下 小结与扩展这一章我们主要解决了移动客户端与服务器使用HTTP访问的问题,我们了解了http访问的整个过程,完成了客户端的HTTP访问类,在最后的例子中我们使用了http.get()方法来与服务器交互,当然我们的访问类也支持post方法。 在接下来的一章,我们将继续扩展HTTP访问的客户端与服务器端,主要解决传输加密、参数等问题 |
|