//AFNetWorking 当下最流行的数据请求方法 里面不仅包含数据请求还包含数据解析
//包含的数据请求就是对系统类NSURLConnection的封装
//数据解析(NSJSONSerialization、XMLParser)
//AFNetworking 下至兼容ios6.0 以及block语法 arc
//通过AFNetWorking请求json数据 并解析
//<1>创建http请求操作管理者对象
AFHTTPRequestOperationManager * manager =[AFHTTPRequestOperationManager manager];
//<2>设置请求对象向服务器请求的数据类型(json还是xml)
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"application/json"];
========也可以用============
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", @"text/xml", nil];
//<3>开始数据请求并且解析
[manager GET:kJSONUrlString parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
//解析数据
//json
if([responseObject isKindOfClass:[NSDictionary class]])
{
NSLog(@"%@",responseObject);
}
//xml
else if([responseObject isKindOfClass:[NSData class]])
{
NSLog(@"%@",responseObject);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error)
{
NSLog(@"error:%@",error.description);
}];
}
======当数据源为XML时我们用GData(自带的比较耗时)==============
//通过AFNetworking请求xml数据并解析
//<1>创建http请求操作管理对象
AFHTTPRequestOperationManager * manager = [AFHTTPRequestOperationManager manager];
//<2>设置请求的数据类型
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/xml"];
//<3>xml数据解析 默认使用的XMLParser进行数据解析 这种解析方式比较复杂 一般的时候我们解析xml数据都是第三方库GData 所以此处需要关闭AFNetworking提供的xml数据解析的方法
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
//<4>xml数据开始请求并解析
[manager GET:kXMLUrlString parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
if([responseObject isKindOfClass:[NSData class]])
{
//使用GData解析xml数据
//<1>将所有数据解析出来方在内存中
GDataXMLDocument * document = [[GDataXMLDocument alloc]initWithData:responseObject encoding:NSUTF8StringEncoding error:nil];
//<2>使用xpath获取请求的内容
NSArray * titlesArr = [document nodesForXPath:@"/doc/focus/frame/title" error:nil];
//<3>将节点的内容打印出来
for(GDataXMLElement * element in titlesArr)
{
NSLog(@"title:%@",element.stringValue);
}
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"error:%@",error.description);
}];
//===============判断当前网络================
//<1>创建http请求操作管理对象
AFHTTPRequestOperationManager * manager = [AFHTTPRequestOperationManager manager];
//-------------扩展------------------
[manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status)
{
if(status == AFNetworkReachabilityStatusReachableViaWiFi)
{
NSLog(@"wifi");
}
else if (status == AFNetworkReachabilityStatusReachableViaWWAN)
{
NSLog(@"3G/GPRS");
}
else if (status == AFNetworkReachabilityStatusNotReachable)
{
NSLog(@"无网络连接");
}
}];
[manager.reachabilityManager startMonitoring];//获取当前网络