iOS开发中网络获取数据的主流第三方ASIHTTPRequest和AFNetworking,但前者已经停止维护,所以AFNetworking成为现在主流的网络获取数据的第三方框架。此外还有一个MKNetworkKit框架也很不错,感兴趣的可以了解一下。之前我也写过一篇利用AFNetworking实现图片下载显示进度和断点续传的博文,感兴趣的也可以点一下传送门:利用AFN实现图片下载,支持断点续传,显示下载进度
GET:
// 1.获得请求管理者
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
// 2.封装请求参数
NSMutableDictionary *params = [NSMutableDictionary dictionary];
params[@
"userId"
] = [appDefault objectForKey:@
"userId"
];
params[@
"IMSI"
] = _IMSI.text;
params[@
"nickName"
] = _nickName.text;
params[@
"phoneNumber"
] = _phoneNumber.text;
NSString *url = [ServiceInfo stringByAppendingString:@
"http://103.238.80.57:8080/Vietnam/Application/bindingDevice"
];
// 3.发送GET请求
[mgr GET:url parameters:params
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@
"%@"
,responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@
"%@"
,error);
}];
POST:
// 1.获得请求管理者
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
// 2.封装请求参数
NSMutableDictionary *params = [NSMutableDictionary dictionary];
params[@
"userId"
] = [appDefault objectForKey:@
"userId"
];
params[@
"IMSI"
] = _IMSI.text;
params[@
"nickName"
] = _nickName.text;
params[@
"phoneNumber"
] = _phoneNumber.text;
NSString *url = [ServiceInfo stringByAppendingString:@
"http://103.238.80.57:8080/Vietnam/Application/bindingDevice"
];
// 3.发送GET请求
[mgr POST:url parameters:params
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@
"%@"
,responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@
"%@"
,error);
}];
// 1.获得请求管理者
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
// 因为传递过去和接收回来的数据都不是json类型的,所以在这里要设置为AFHTTPRequestSerializer和AFHTTPResponseSerializer
mgr.requestSerializer = [AFHTTPRequestSerializer serializer];
// 请求
mgr.responseSerializer = [AFHTTPResponseSerializer serializer];
// 响应
// 2.封装请求参数
NSMutableDictionary *params = [NSMutableDictionary dictionary];
params[@
"userId"
] = [appDefault objectForKey:@
"userId"
];
params[@
"IMSI"
] = _IMSI.text;
params[@
"nickName"
] = _nickName.text;
params[@
"phoneNumber"
] = _phoneNumber.text;
NSString *url = [ServiceInfo stringByAppendingString:@
"http://103.238.80.57:8080/Vietnam/Application/bindingDevice"
];
// 3.发送GET请求
[mgr GET:url parameters:params
success:^(AFHTTPRequestOperation *operation, id responseObject) {
// 转码,如果返回的数据不是JSON,这里必须要转码
NSString *string = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
NSLog(@
"%@"
,string);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@
"%@"
,error);
}];
第二种方法,利用AFHTTPRequestOperation
如果发生Error Domain=NSURLErrorDomain Code=-1000 "bad URL"UserInfo=0x14defc80 {NSUnderlyingError=0x14deea10 "bad URL",NSLocalizedDescription=bad URL这个错误,请检查URL编码格式。有没有进行stringByAddingPercentEsc
如何通过URL获取图片
异步获取图片,通过队列实现,而且图片会有缓存,在下次请求相同的链接时,系统会自动调用缓存,而不从网上请求数据。
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 100.0f, 100.0f, 100.0f)];[imageView setImageWithURL:[NSURL URLWithString:@"http://i./r4uwx.jpg"] placeholderImage:[UIImage imageNamed:@"placeholder-avatar"]]; [self.view addSubview:imageView];
上面的方法是官方提供的,还有一种方法,
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURLURLWithString:@"http://www.scott-sherwood.com/wp-content/uploads/2013/01/scene.png"]];
如果使用第一种URLWithString:
如何通过URL获取plist文件
通过url获取plist文件的内容,用的很少,这个方法在官方提供的方法里面没有
如果稍不留神,可能就出现ErrorDomain=AFNetworkingErrorDomain Code=-1016 "Expected content type{(
)}, got text/plain"UserInfo=0x16e91ce0 {NSLocalizedRecoverySugge
...
...
,AFNetworkingOperationFai
)}, got text/plain,AFNetworkingOperationFai
} }}
可能还会出现乱码,解决办法就是[AFPropertyListRequestOpe
如何通过URL获取XML数据
xml解析使用AFXMLRequestOperation,需要实现苹果自带的NSXMLParserDelegate委托方法,XML中有一些不需要的协议格式内容,所以就不能像json那样解析,还得实现委托。我之前有想过能否所有的XML链接用一个类处理,而且跟服务端做了沟通,结果很不方便,效果不好。XML大多标签不同,格式也不固定,所以就有问题,使用json就要方便的多。
第一步;在.h文件中加入委托NSXMLParserDelegate
第二步;在.m文件方法中加入代码
第三步;在.m文件中实现委托方法
-(void)parserDidStartDocument:(NSXMLParser *)parser{
}
//解析起始标记
- (void)parser:(NSXMLParser *)parserdidStartElement:(NSString*)elementName namespaceURI:(NSString *)namespaceURIqualifiedName:(NSString *)qNameattributes:(NSDictionary*)attributeDict{
}
//解析文本节点
- (void)parser:(NSXMLParser *)parserfoundCharacters:(NSString*)string{
}
//解析结束标记
- (void)parser:(NSXMLParser *)parserdidEndElement:(NSString*)elementName namespaceURI:(NSString *)namespaceURIqualifiedName:(NSString*)qName{
}
//文档结束时触发
-(void)parserDidEndDocument:(NSXMLParser *)parser{
}
如何使用AFHTTPClient进行web service操作