请求json和xml数据时的方式

时间:2021-09-12 10:22:44

当请求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];

}