iOS AFNetWorking 请求JSON / XML 数据
2014-11-28 00:00
274 查看
摘要: 之前使用的ASI很强大,但是都知道没有人更新了所以也渐渐被大伙放弃了,现在使用比较多的就是AFNetWorking 2.0 了,当然还有MK NetWorking用的相对少点。AF使用起来比较简单功能也很强大,所以抽空写了个比较实用的Demo...
这是一个使用AFNetWorking 请求JSON 和 XML 数据的demo,包括GET / POST 请求。对于后台的数据大多数使用的是JSON,因为JSON不论是可读性或者解析的方式都是很好的. 但是XML也还有很多公司使用,相对JSON就没那没好而已。这个demo只使用一个类方法,根据传入的参数来判断是XML还是JSON解析,方便使用。
先附上源码下载链接:http://pan.baidu.com/s/1i37nXPz
1、方法封装在FKL_DataService.h / FKL_DataService.m 中
>1 FKL_DataService.h
>2 FKL_DataService.m 方法实现具体代码说明
主要使用 AFHttpRequestOperationManager 这个类,创建该类
根据参数format 判断请求的数据是XML 还是 JSON,并且设置解析方法
拼接URL ,因为数据请求都会有一个主URL和其他的子URL,便于方便灵活使用在这里定义一个BaseURL,每次只要参数子URL就可以了
根据参数 type 判断是GET 还是 POST 请求
GET 请求
POST请求
2、到此整个封装代码完成,还是挺简单的。后面需要用调用这个类方法就OK了,还是很方便的
viewController.m 中调用
子URL
这是一个使用AFNetWorking 请求JSON 和 XML 数据的demo,包括GET / POST 请求。对于后台的数据大多数使用的是JSON,因为JSON不论是可读性或者解析的方式都是很好的. 但是XML也还有很多公司使用,相对JSON就没那没好而已。这个demo只使用一个类方法,根据传入的参数来判断是XML还是JSON解析,方便使用。
先附上源码下载链接:http://pan.baidu.com/s/1i37nXPz
1、方法封装在FKL_DataService.h / FKL_DataService.m 中
>1 FKL_DataService.h
/** * AFNetWorking 网络请求 * * @param url 请求地址 * @param pareames 参数 * @param type 请求方式(POST / GET) * @param format 请求的数据是xml 还是 JSON * @param complete 请求完成后回调的block * * @return AFHTTPRequestOperation */ +(AFHTTPRequestOperation *)requestURL:(NSString *)url parameters:(NSDictionary *)pareames withType:(NSString *)type format:(NSString *)xmlOrJson complete:(CompleteBlock)block ;
>2 FKL_DataService.m 方法实现具体代码说明
主要使用 AFHttpRequestOperationManager 这个类,创建该类
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
根据参数format 判断请求的数据是XML 还是 JSON,并且设置解析方法
// 数据类型转为大写,防止大小写混乱的参数 NSString *str = [xmlOrJson uppercaseString]; if ([str isEqualToString:@"JSON"]) { // 设置解析方式 manager.responseSerializer = [AFJSONResponseSerializer serializer];(默认是JSON解析) } else if ([str isEqualToString:@"XML"]){ // AFHTTPResponseSerializer不使用解析,即返回的为NSData类型数据,如果使用AFXMLParserResponseSerializer 解析会比较麻烦,所以会在后面使用第三方的XML解析(XMLReader) manager.responseSerializer = [AFHTTPResponseSerializer serializer]; }
拼接URL ,因为数据请求都会有一个主URL和其他的子URL,便于方便灵活使用在这里定义一个BaseURL,每次只要参数子URL就可以了
#define BaseURL @"http://www.raywenderlich.com
// 拼接完整的URL NSString *intactURL = [BaseURL stringByAppendingString:url];
根据参数 type 判断是GET 还是 POST 请求
GET 请求
// 请求方式 NSString *typeStr = [type uppercaseString]; // 防止参数大小写混乱 if ([typeStr isEqualToString:@"GET"]) { [manager GET:intactURL parameters:pareames success:^(AFHTTPRequestOperation *operation, id responseObject) { if ([str isEqualToString:@"XML"]) { NSString *xmlString = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]; // 使用XMLReader,将xml数据解析为字典格式(请看XMLReader类中的方法) NSError *error = nil; NSDictionary *xmlDic = [XMLReader dictionaryForXMLString:xmlString error:&error]; // 请求数据成功后回调 block(xmlDic); } else { //默认是JSON解析,responseObject 就是解析后的字典不需要自己再做解析 block(responseObject); } } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"请求数据失败:%@!",error); }];
POST请求
else if([typeStr isEqualToString:@"POST"]){ [manager POST:intactURL parameters:pareames success:^(AFHTTPRequestOperation *operation, id responseObject) { if ([str isEqualToString:@"XML"]) { NSString *xmlString = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]; // 将xml数据转换为字典 NSError *error = nil; NSDictionary *xmlDic = [XMLReader dictionaryForXMLString:xmlString error:&error]; block(xmlDic); // NSLog(@"XML数据请求成功:%@",xmlString); } else { block(responseObject); // NSLog(@"JSON数据请求成功:%@",responseObject); } } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"数据请求失败%@",error); }]; }
2、到此整个封装代码完成,还是挺简单的。后面需要用调用这个类方法就OK了,还是很方便的
viewController.m 中调用
子URL
#define subURL @"/demos/weather_sample/weather.php?"
- (void)_loadData { // 需要传入的请求参数,用字典保存 NSMutableDictionary *perame = [NSMutableDictionary dictionary]; [perame setObject:@"xml" forKey:@"format"]; // 直接调用类方法 [FKL_DataService requestURL:subURL parameters:perame withType:@"POST" format:@"XML" complete:^(id result) { [self showReponsData:result]; }]; } // 解析后的数据使用 - (void)showReponsData:(NSDictionary *)result { NSLog(@"返回数据:%@",result); }
相关文章推荐
- Ajax核心XMLHttpRequest对象、(发送请求、接收)方法和属性介绍、AJAX开发框架、数据格式提要(XML、JSON、HTML)
- Ajax核心XMLHttpRequest对象、(发送请求、接收)方法和属性介绍、AJAX开发框架、数据格式提要(XML、JSON、HTML)
- XMLhttpRequest 请求 XML,JSON ,POJO 数据
- IOS 请求数据解析 XML 和 JSON
- Ajax核心XMLHttpRequest对象、(发送请求、接收)方法和属性介绍、AJAX开发框架、数据格式提要(XML、JSON、HTML)
- PHP入门之局域网多站点访问、带参数请求、Json数据、Xml数据
- 使用AFNet分别请求json、xml以及plist的数据
- Ajax请求Servlet返回文本 json html和XML数据并解析xml及responseText和responseXML的区别
- XML 数据请求与JSON 数据请求
- json xml 网络请求是用的传输数据的格式
- XML 数据请求与JSON 数据请 4000 求
- 初涉Ajax,以post或get方法发送数据,以json或xml形式接收服务器返回的请求
- jquery ajax请求返回xml,html,text,json,..数据实例详解
- Ajax请求Servlet返回文本 json html和XML数据并解析xml及responseText和responseXML的区别
- 一个好用的测试服务器接口的工具(post请求,xml,json等数据格式)
- android解析JSON,XML数据的请求网络工具类
- IOS 请求数据解析 XML 和 JSON
- Ajax核心XMLHttpRequest对象、(发送请求、接收)方法和属性介绍、AJAX开发框架、数据格式提要(XML、JSON、HTML)
- Android网络与数据存储——网络编程数据处理(网络请求解析Json,解析xml)
- 使用 XMLHttpRequest 实现 Ajax 三:取回 Json 数据