【转】 Pro Android学习笔记(七十):HTTP服务(4):SOAP/JSON/XML、异常
文章转载只能用于非商业性质,且不能带有虚拟货币、积分、注册等附加条件,转载须注明出处:http://blog.csdn.net/flowingflying/
SOAP
SOAP,即Simple Object Access Protocol,是一种简单的基于 XML 的协议,它使应用程序通过 HTTP 来交换信息。Android并不提供SOAP API接口。开发者可以通过kSOAP2开发套件在Android上建立SOAP client,具体参见http://code.google.com/p/ksoap2-android/。
作为project,除了在终端上实现SOAP client外,还可以在网络部署支持SOAP的服务器,Android应用和服务器相连,服务器再通过SOAP连到目标服务器。如果目标服务器有改动(尤其不是自己开发的,不受控),我们不需要更新Android上的应用,只需更新中间的SOAP服务器。又例如,我们需要对用户订购进行管理,用户订购可以在中间服务器进行,这是一种很有用的结构,将业务逻辑和用户管理分离。
JSON和XMLPullParser
Android提供JSON(JavaScript Object Notation)解析API,提供XML解析API。JSON的API封装在org.json包,XML解析可以使用XMLPullParser,具体参见Android学习笔记(三八):资源resource(上)、XML解析(XmlPullParser) 。
Exception处理
HTTP service是外部服务,对于异常处理要重视,包括传输异常、协议异常和超时。传输异常是通常是网络连接差。协议异常出现在协议层,服务器通常会返回一个4xx的错误,例如要求携带login信息,但是没有。超时有连接超时和socket超时,前者是无法连接到服务器,后者是连接上了,但是服务器在指定时间内没有响应。对于传输异常,HttpClient已经很好地进行处理。对于协议异常,那是我们处理业务逻辑代码的事。我们需要处理的是超时。
下面的例子是异常进行自动重连(包括传输异常和超时),最多可重连3次。
public HttpResponse executeHttpGetWithRetry() throws Exception {
int retry = 3; //最大重连次数
int count = 0; //实际计数
while (count < retry) {
count += 1;
try {
HttpResonse response = executeHttpGet(); //在上一学习例子中的multiPartTest基础上,修改为更简单的executeHttpGet方法
// 如果到此,说明运行成功,返回响应
return response;
} catch (Exception e) {
//如果到此,说明异常出现,根据重连次数进行重试
if (count < retry) {
System.out.println(e.getMessage());
} else {
System.out.println("all retries failed");
throw e;
}
}
}
return null;
}
本博文涉及的例子代码,可以在Pro Android学习:Http service小例子中下载。
相关链接: 我的Android开发相关文章
【转】 Pro Android学习笔记(七十):HTTP服务(4):SOAP/JSON/XML、异常的更多相关文章
- 【转】 Pro Android学习笔记(十九):用户界面和控制(7):ListView
目录(?)[-] 点击List的item触发 添加其他控件以及获取item数据 ListView控件以垂直布局方式显示子view.系统的android.app.ListActivity已经实现了一个只 ...
- 【转】Pro Android学习笔记(十二):了解Intent(下)
解析Intent,寻找匹配Activity 如果给出component名字(包名.类名)是explicit intent,否则是implicit intent.对于explicit intent,关键 ...
- 【转】Pro Android学习笔记(十):了解Intent(上)
目录(?)[-] Intent基本含义 系统的Intent Android引入了Intent的概念来唤起components,component包括:1.Activity(UI元件) 2.Servic ...
- 【转】Pro Android学习笔记(十四):用户界面和控制(2):Text类控制
目录(?)[-] TextView 例子1在XML中设置autoLink属性 例子2在代码中设置autoLink属性 EditText AutoCompleteTextView MultiAutoCo ...
- 【转】Pro Android学习笔记(十六):用户界面和控制(4):ImageView控件
目录(?)[-] XML片段 代码设置ImageView ImageView是基础的控件,它是android.widget.ImageView的继承类. XML片段 <LinearLa ...
- 【转】Pro Android学习笔记(十五):用户界面和控制(3):Button控件
目录(?)[-] 基础Button ImageButton ToggleButton CheckBox RadioButton 基础Button Button是最常用的基础控件之一,在Android中 ...
- 【转】Pro Android学习笔记(十八):用户界面和控制(6):Adapter和AdapterView
目录(?)[-] SimpleCursorAdapter 系统预置的layout ArrayAdapter 动态数据增插删排序 自定义TextView风格 其他Adapter AdapterView不 ...
- 【转】Pro Android学习笔记(三十):Menu(1):了解Menu
目录(?)[-] 创建Menu MenuItem的属性itemId MenuItem的属性groupId MenuItem的属性orderId MenuItem的属性可选属性 Menu触发 onOpt ...
- 【转】 Pro Android学习笔记(三五):Menu(6):XML方式 & PopUp菜单
目录(?)[-] 利用XML创建菜单 XML的有关属性 onClick事件 Pop-up菜单 利用XML创建菜单 在代码中对每个菜单项进行设置,繁琐且修改不灵活,不能适配多国语言的要求,可以利用资源进 ...
- 【转】Pro Android学习笔记(二五):用户界面和控制(13):LinearLayout和TableLayout
目录(?)[-] 布局Layout 线性布局LinearLayout 表格布局TableLayout 布局Layout Layout是容器,用于对所包含的view进行布局.layout是view的子类 ...
随机推荐
- iOS 开发与H5交互(JavaScriptCore框架的使用)
现在的iOS项目中嵌入了越来越多的Web界面,当然是为了方便,那么为了迎合这一趋势,作为iOS开发程序员,我们必须要了解怎么样用OC去和这些Web界面进行交互.这里介绍的是JavaScriptCore ...
- Webpack探索【3】--- loader详解
本文主要说明Webpack的loader相关内容.
- 被学长教会的高斯消元法Gauss
昨天学长教了我高斯消元法. 这里用一个栗子来模拟一下Gauss的流程. 真的通俗易懂!这里是洛谷题目链接. 这就是例子 x-2y+3z= 4x-5y+6z= 7x-8y+10z= 先将它转化为矩阵 - ...
- 我的Android进阶之旅------>Android中android:windowSoftInputMode的用法
面试题:如何在显示某个Activity时立即弹出软键盘? 答案:在AndroidManifest.xml文件中设置<activity>标签的android:windowSoftInputM ...
- 跟我一起用Symfony写一个博客网站;
我的微信公众号感兴趣的话可以扫一下, 或者加微信号 whenDreams 第一部分:基础设置,跑起一个页面-首页 第一步: composer create-project symfony/fram ...
- session不能使用 ASP.NET MVC
在web.coonfig中添加 <sessionState mode=" /> 如: <system.web> //... <sessionState mode ...
- iOS 动态修改导航栏颜色 UINavigationBar
示例 所谓动态修改 意思是 在当前页面滚动的过程中 亦或 是在 触发返回事件\进入一个新的页面 导航栏的动态变化 由于系统级别的navBar 高度集成 很多自己想实现的功能 很不好弄 如果是通过 ...
- linux ps aux 结果解释
# ps aux | moreUSER PID %CPU %MEM VSZ RSS TTY STAT START ...
- Function Pointers in C
来源:https://cs.nyu.edu/courses/spring12/CSCI-GA.3033-014/Assignment1/function_pointers.html Function ...
- Java集合类--->入门下篇
HashSet集合 在上篇大概了解了什么是集合类,知道它可以存储任意类型的对象,并且比数组灵活,集合类的长度可以变化.这里将接着介绍一下,Set接口的实现类之一,HashSet集合,Set集合:元素不 ...