AFNetworking 用法详解
之前一直使用ASIHttpRequest 做网络请求 ,后来新公司用AFNetWorking ,经过一段时间学习总结一下二者的优缺点:
1.AFNetWorking的优缺点
优点:
1.维护和使用者比较多
2.对ARC支持
3.对Block的支持非常好
4.专门对异步请求的支持
5.支持基于URL 缓存
6.图片以及NSURLCache AFCache缓存使用
7.支持后台下载,缓存离线请求的支持(SDURLCache)
8.对JSON支持比较好
9.对实现的http请求比较容易
10.对HTTPS 的支持
缺点:
是基于Foundation框架的NSURLConnection对网络进行的封装,不是用的底层的CFNetwork进行的封装,扩展功能可能稍微少一些,
但是在http上的网络支持已经足够。
二.ASIHttpRequest
优点:
1.对网络底层CFNetwork支持
2.对代理支持设置比较方便
3.支持离线下载和基于URL的缓存
4.对HTTPS的支持
5.对http 请求方面的实现不是太好,会多写点代码
6.同步和异步的支持
用法:
1.首先将AFNetWorking(主要基于网络请求的方法) UIKit+AFNetworking(异步加载图片的方法)加入到工程 一般引用这两个包,不然会有提示错误 SystemConfiguration.framework、
MobileCoreServices.framework
2.在使用的地方 #import"AFHTTPRequestOperationManager"
#import"AFHTTPSessionManager"
AFHTTPOperationManager 的post有两个方法, 一个是普通的post ,另一个是可以上传图片
1.上传图片
AFHTPOperationMAnager*manager=[AFHTTPOperationManager manager];
manager.responseSerializer.acceptableContentTypes=[NSSetsetWithObject:@"text/html"];
NSDictionary*parameters=@{@"参数1":@"value1",@"参数2":@"value2"....};
NSData*imageData=UIImageJPEGRepresentation([UIImage imageNamed:@"1.png"],1.0);
[manager POST:@"替换成你要访问的地址"parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData>formData){
[formData appendPartWithFileData:imageData name:@"1" fileName:@"1.png" mimeType:@"image/jpep"];
} success:^(AFHTTPRequestOperation*operation,id responseObject){
NSLog(@"success:%@",responseObject);}
failure:^(AFHTTPRequestOperation*operation,ESError*error){
NSLog(@"Error:%@",error);}]
这个方法可以上传图片,如果不用上传图片,可以吧这句话去掉
[formData appendPartWithFileData:imageData name:@"1" fileName:@"1.png" mimeType:@"image/jpep"];
上传多张图片
-(void)uploadPictures{
NSString*domainStr=@"http://192.168.1.69/xffcol/index.php/api/";
AFHTTPRequestOperationManager*manager=[AFHTTPRequestOperationManager manager];
manager.responseSerializar=[AFHTTPResponseSerializar serializer];
//如果还要上传其他的参数,参考上面的POST请求 ,创建一个可变字典,存入需要提交的参数内容, 作为paramater的参数
[manager POST:domainStr parameters:nil consructingBodyWithBlock:^(id<AFMultipartFormData>formData)
{
//_imageArray 就是图片数组,我的_imageArray里面存的都是图片的data,下面可以直接取出来使用,如果存的是image,
//将image转换成data的方法如下:NSData*imageData=UIImageJPEGRepresentation([UIImage imageNamed:@"1.png"],1.0);
if (_imageArray.count>0){
for(int i=0;i<_imageArray.count;i++){
NSData*data=_imageArray[i]
//上传的参数名
NSString*name=[NSString stringWithFormat:@"%d",i]
//上传的filename
NSString*fileName=[NSString stringWithFormat:@"%@.png",name];
[formData appendPartWithFileData:data
name:name
filename:fileName
miimeType:@"image/png"];
}
}
success:^(AFHTTPRequestOperation)operation,id responseObject){
//关闭风火轮
[UIApplication sharedApplication].netorkActivityIndicatorVisiable=NO;
//JSON解析
NSDictionary*resultDic=[NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];
NSLog(----------------);
}failure:^(AFHTTPRequestOperation*operation,NSError*error{
//解析失败隐藏通风火轮(可以打印error.userInfo查看错误信息)
[UIApplication sharedApplication].networkActivityIndicatorVisible=NO;
}];
}
2.普通的post
AFHTPRequestOperationManger*manager=[AFHTTPOperation manager];
manager.responseSerialize.acceptableContentTypes=[NSSetsetWithObject:@"text/html"];
NSDictionary*parameters=@{@"参数1":@"value1",@"参数2":@"value2"....};
[manager POST:@"替换成需要访问的地址"parameters:
success:^(AFHTTPRequestOperation*operation,id responseObject){
NSLog(@"success:%@",responseObject);}
failure:^(AFHTTPRequestOperation*operation,ESError*error){
NSLog(@"Error:%@",error);}]
二.GET请求网络数据方式
-(void)obtainData
{
//启动系统风火轮
[UIApplication shareApplication].networkActicityIndicatorVisible=YES;
//前面写服务器给的域名,后面拼接上需要提交的参数,假如参数是key=1
NSString*domainStr=@"http://192.168.1.69/xffcol/index.php/Api/key/1/";
AFHTTPOperationManager*manager=[AFHTTPOperationManager manager];
manager.responseSerializer=[AFHTTPResponseSerializer serializer];
//以GET的形式提交,只需要将上面的请求地址给GET做参数就可以
[manager GET:domainStr parameters:nil success:^(AFHTTPRequestOperation*operation, id responseObject)
{
//隐藏系统风火轮
[UIApplication sharedApplication].networkActicityIndicatorVisible=NO;
//json解析
NSDictionary *resultDic=[NSJsonSerialization JSONOBjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];
NSLog(@"---获取到的json格式的字典---%@",resultDic);
}failure:^(AFHTTPRequestOperation*operation,NSError*error{
//解析失败隐藏通风火轮(可以打印error.userInfo查看错误信息)
[UIApplication sharedApplication].networkActivityIndicatorVisible=NO;
})]
}
AFNetworking 用法详解的更多相关文章
- C#中string.format用法详解
C#中string.format用法详解 本文实例总结了C#中string.format用法.分享给大家供大家参考.具体分析如下: String.Format 方法的几种定义: String.Form ...
- @RequestMapping 用法详解之地址映射
@RequestMapping 用法详解之地址映射 引言: 前段时间项目中用到了RESTful模式来开发程序,但是当用POST.PUT模式提交数据时,发现服务器端接受不到提交的数据(服务器端参数绑定没 ...
- linux管道命令grep命令参数及用法详解---附使用案例|grep
功能说明:查找文件里符合条件的字符串. 语 法:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>] ...
- mysql中event的用法详解
一.基本概念mysql5.1版本开始引进event概念.event既“时间触发器”,与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发.通过单独或调用存 ...
- CSS中伪类及伪元素用法详解
CSS中伪类及伪元素用法详解 伪类的分类及作用: 注:该表引自W3School教程 伪元素的分类及作用: 接下来让博主通过一些生动的实例(之前的作业或小作品)来说明几种常用伪类的用法和效果,其他的 ...
- c++中vector的用法详解
c++中vector的用法详解 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间 ...
- AngularJS select中ngOptions用法详解
AngularJS select中ngOptions用法详解 一.用法 ngOption针对不同类型的数据源有不同的用法,主要体现在数组和对象上. 数组: label for value in a ...
- systemctl命令用法详解
systemctl命令用法详解系统环境:Fedora 16binpath:/bin/systemctlpackage:systemd-units systemctl enable httpd.serv ...
- CSS3的@keyframes用法详解:
CSS3的@keyframes用法详解:此属性与animation属性是密切相关的,关于animation属性可以参阅CSS3的animation属性用法详解一章节. 一.基本知识:keyframes ...
随机推荐
- 使用Nexus搭建Maven代理仓库
使用Maven构建和管理项目是非常享受的一件事,我们可以从Maven中央仓库下载所需要的构件(artifact),但实际开发中由于种种原因我们需要在架设一个Maven本地代理仓库,如:不方便访问公网. ...
- 1664: [Usaco2006 Open]County Fair Events 参加节日庆祝
1664: [Usaco2006 Open]County Fair Events 参加节日庆祝 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 255 S ...
- Office 365开发概述及生态环境介绍(二)
本文于2017年3月19日首发于LinkedIn,原文链接在这里 在上一篇 文章,我给大家回顾了Office发展过来的一些主要的版本(XP,2003,2007,2013等),以及在Office客户端中 ...
- 配置linux实现路由功能
说明: 主机1是内网的数据存储服务器,只有一块网卡10.0.0.2: 主机2是web服务器,有两块网卡,一块面向内网10.0.0.3,一块面向外网192.168.220.136: (因为是在虚拟机的环 ...
- JavaScript高级程序设计---学习笔记(一)
今天,2017.3.17开始利用课余时间仔细学习<JavaScript高级程序设计>,将需要掌握的知识点记录下来,争取把书里的所有代码敲一遍并掌握. 1.标识符命名最好是第一个字母小写,剩 ...
- java入门了解02
1:JDK,JRE,JVM的作用关系 (一)作用 JVM:提供java跨平台 JRE:java运行环境 JDK:java开发环境 ...
- 《Django By Example》第十二章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:第十二章,全书最后一章,终于到这章 ...
- IOS简单画板实现
先上效果图 设计要求 1.画笔能设置大小.颜色 2.有清屏.撤销.橡皮擦.导入照片功能 3.能将绘好的画面保存到相册 实现思路 1.画笔的实现,我们可以通过监听用户的 平移手势 中创建 UIBezie ...
- 为什么要学Python
人生苦短,我用python.在大学四年的本科学习中,Python是我接触过语法最简单,功能最为强大的语言,拥有众多第三方库的支持的语言.如果要选一门编程语言作为入门,建议使用Python.但是为了更加 ...
- NPOI扩展--判断指定单元格是否为合并单元格和输出该单元格的行列跨度(维度)
因工作需要用到跨合并单元格获取数据,所以写了个NPOI扩展类. 主要方法如下: 1.判断指定行/列索引(单元格)是否为合并单元格. 2.获取指定列索引的实际含有数据的单元格. 3.返回指定行/列索引的 ...