请求json和xml数据时的方式
当请求xml数据时,直接通过NSMutableData接收后解析,
NSURL *url = [NSURL URLWithString:PATH];
_receiveData = [[NSMutableData alloc] initWithContentsOfURL:url];
GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:_receiveData encoding:NSUTF8StringEncoding error:nil];
GDataXMLElement *root = [doc rootElement];
而请求的是json数据时,需要使用NSURLConnection的对象和协议方法来异步请求数据,该方法是苹果系统提供的.
NSURL *url=[NSURL URLWithString:path];
将请求的服务器地址封装在一个请求对象
NSURLRequest *request=[NSURLRequest requestWithURL:url];
创建一个对象,自动将比较费时的请求数据的操作启动一个子线程去执行,数据请求到后通过协议方法回到UI
_urlConnection=[[NSURLConnection alloc]initWithRequest:request delegate:self];
协议方法
//当请求过程中出现错误(没有网络,请求超时。。。)时执行此协议方法
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error;
接收到服务器响应请求时执行的协议方法,response是服务器对客户端请求的一个响应对象
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
//响应应该是NSHTTPURLResponse类型的
NSHTTPURLResponse *res=(NSHTTPURLResponse*)response;
//获取响应的头部
NSLog(@"%@",res.allHeaderFields);
//响应的状态码:200成功,404资源不存在
NSLog(@"%ld",res.statusCode);
//清空缓冲区的数据
[_receiveData setLength:0];
}
//请求到数据data,如果数据量很大,该方法会被调用多次
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[_receiveData appendData:data];
}
//请求结束,数据接收完毕调用此协议方法
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
//1、解析数据
NSDictionary *dict=[NSJSONSerialization JSONObjectWithData:_receiveData options:NSJSONReadingMutableContainers error:nil];
NSArray *array=dict[@"users"];
[_dataArray addObjectsFromArray:array];
//2、刷新界面
[self.tableView reloadData];
}
请求json和xml数据时的方式的更多相关文章
- iOS开发——网络Swift篇&JSON与XML数据解析
JSON与XML数据解析 JSON数据解析(内置NSJSONSerialization与第三方JSONKit) 一,使用自带的NSJSONSerialization 苹果从IOS5.0后推出了SD ...
- Ajax--PHP+JQuery+Ajax解析json、XML数据、加载页面
一.JQuery+Ajax用get.post方式提交和请求数据 知识要点: $('#userName').blur(function () { var txt = $(this).val(); $.a ...
- php生成json或者xml数据
, ,'数据返回成功',$arr);echo $xml;?>
- wcf序列化大对象时报错:读取 XML 数据时,超出最大
错误为: 访问服务异常:格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ 进行反序列化时出 错: request.InnerException 消息是“反序 ...
- InnerException 消息是“反序列化对象 属于类型 *** 时出现错误。读取 XML 数据时,超出最大字符串内容长度配额 (8192)。(注意细节)
WEB站点在调用我们WCF服务的时候,只要传入的参数过长,就报如下错误: 格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ 进行反序列化时出错: formD ...
- C#解析json和xml数据
C#解析json和xml数据 // 用到的包using Newtonsoft.Json; // using Newtonsoft.Json.Linq; const string value = &qu ...
- Web Service 或 WCF调用时读取 XML 数据时,超出最大字符串内容长度配额(8192)解决方法
1.调用服务时服务 当我们使用 Web Service 或 WCF 服务时,常把读取的数据转化为string类型(xml格式),当数据量达到一 定数量时,会出现以下异常: 错误:格式化程序尝试对消息反 ...
- 读取 XML 数据时,超出最大字符串内容长度配额 (8192)
格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://www.thermo.com/informatics/xmlns/limswebservice 进行反序列化时出错: Process ...
- 格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ 进行反序列化时出错: GetLzdtArticleResult。InnerException 消息是“反序列化对象 属于类型 lzdt.DTO.Dtolzdt[] 时出现错误。读取 XML 数据时,超出最大
当遇到这个错误的时候郁闷了好长时间报错是字符串长度过大可是修改了MaxStringContentLength”属性的值却不起作用最后才发现还是因为配置文件配置的问题在服务端 格式化程序尝试对消息反序列 ...
随机推荐
- Vue 组件5 高级异步组件
自2.3.0起,异步组件的工厂函数也可以返回一个如下的对象. const AsyncComp = () => ({ // 需要加载的组件. 应当是一个 Promise component: im ...
- Android WebView 常见问题
1.为WebView自定义错误显示界面: /** * 显示自定义错误提示页面,用一个View覆盖在WebView */ protected void showErrorPage() { LinearL ...
- flume A simple example
http://flume.apache.org/FlumeUserGuide.html A simple example
- JVM架构和GC垃圾回收机制详解
JVM架构图分析 下图:参考网络+书籍,如有侵权请见谅 (想了解Hadoop内存溢出请看:Hadoop内存溢出(OOM)分类.参数调优化) JVM被分为三个主要的子系统 (1)类加载器子系统(2)运行 ...
- BitMap、Geo、HyperLogLog
前言 Reids 在 Web 应用的开发中使用非常广泛,几乎所有的后端技术都会有涉及到 Redis 的使用.Redis 种除了常见的字符串 String.字典 Hash.列表 List.集合 Set. ...
- SecurCRT 远程linux 输入中文及 oracle 查询出文号问题
一. 首先确认你的linux是否设置了支持中文 cat /etc/sysconfig/i18n 其中: LANG 变量是 language 的简称, 这个变量时决定系统的默认语言, 即系统菜单, 程序 ...
- Chai.js断言库API中文文档【转载】
基于chai.js官方API文档翻译.仅列出BDD风格的expect/should API.TDD风格的Assert API由于不打算使用,暂时不放,后续可能会更新. BDD expect和shoul ...
- iOS ---APP更换应用图标logo
iOS 10.3 加入了了更换应用图标的新功能,开发者可以为应用提供多个应用图标选择.用户可以自由的在这些图标之间切换,下面具体查看切换步骤. 1.先把你需要的所有图片都导入项目中(比例为1:1) 2 ...
- HDU2602Bone Collector 简单0-1背包
Bone Collector Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- PHP设置时区的方法
第一种方法:修改php.ini文件 即:date.timezone = '修改的时区名称' 对全局有效 第二种方法:date_default_timezone_set()动态设置时区,只是当前 ...