[iOS 多线程 & 网络 - 4.0] - AFN框架简单使用
- AFNetworking
- 是对NSURLConnection的封装
- 运行效率没有ASI高(因为ASI基于CFNetwork),但是使用简单
- AFN支持ARC
/** 发送 GET/POST 请求 */
- (void) sendNormalRequest {
// 1.创建请求 管理者
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; // 2.设置参数
NSMutableDictionary *param = [NSMutableDictionary dictionary];
param[@"user"] = @"tom";
param[@"password"] = @""; // 3.发送请求
// // 3.1 GET请求
// [manager GET:@"http://192.168.0.21:8080/MyTestServer/login" parameters:param success:^(AFHTTPRequestOperation *operation, id responseObject) {
// NSLog(@"请求成功");
// NSLog(@"%@", responseObject);
// } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
// NSLog(@"请求失败");
// NSLog(@"%@", error);
// }]; // 3.2 POST请求
[manager POST:@"http://192.168.0.21:8080/MyTestServer/login" parameters:param success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"请求成功");
NSLog(@"%@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"请求失败");
NSLog(@"%@", error);
}];
}
#import <Foundation/Foundation.h> @implementation NSDictionary (Log) /** 本地化显示 */
- (NSString *)descriptionWithLocale:(id)locale {
NSMutableString *str = [NSMutableString string]; [str appendString:@"{\n"]; // 遍历字典
[self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
[str appendFormat:@"\t%@ = %@,\n", key, obj];
}]; [str appendString:@"}"]; // 取出最后一个“,”
NSRange range = [str rangeOfString:@"," options:NSBackwardsSearch];
[str deleteCharactersInRange:range]; return str;
} @end @implementation NSArray (Log) - (NSString *)descriptionWithLocale:(id)locale {
NSMutableString *str = [NSMutableString string]; [str appendString:@"[\n"]; // 遍历数组所有元素
[self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
[str appendFormat:@"%@, \n", obj];
}]; [str appendString:@"]"]; return str;
} @end
- AFHTTPRequestOperationManager 依靠设置序列化器来自动识别、解析返回的数据
- 默认使用的就是json解析,可以不用设置序列化器
- 会把json自动转换成为字典或者数组输出
/** 返回json数据 */
- (void) getJson {
// 1.创建请求 管理者
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; // 设置序列化器
// [manager setResponseSerializer:[AFJSONResponseSerializer serializer]];//默认 // 2.设置参数
NSMutableDictionary *param = [NSMutableDictionary dictionary];
param[@"type"] = @"json"; // 3.发送请求
[manager GET:@"http://192.168.0.21:8080/MyTestServer/video" parameters:param success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"请求成功");
NSLog(@"返回的数据类型是:%@", [responseObject class]);
NSLog(@"%@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"请求失败");
NSLog(@"%@", error);
}];
}
2015-01-30 03:34:14.817 AFNBasicDemo[1889:192783] 返回的数据类型是:__NSCFDictionary
2015-01-30 03:34:14.818 AFNBasicDemo[1889:192783] {
videos = [
{
name = 驯龙高手1,
video = videos/1.MP4,
length = 16秒,
image = images/[20150124-180852-0].PNG
/** 返回xml数据 */
- (void) getXml{
// 1.创建请求 管理者
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; // 设置序列化器
[manager setResponseSerializer:[AFXMLParserResponseSerializer serializer]]; // 2.设置参数
NSMutableDictionary *param = [NSMutableDictionary dictionary];
param[@"type"] = @"xml"; // 3.发送请求
__weak typeof(self) vc = self;
[manager GET:@"http://192.168.0.21:8080/MyTestServer/video" parameters:param success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"请求成功");
NSLog(@"返回的数据类型是:%@", [responseObject class]); NSXMLParser *parser = (NSXMLParser *) responseObject;
parser.delegate = vc;
[parser parse];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"请求失败");
NSLog(@"%@", error);
}];
}
- 也是简单发送请求
- 但是没有ASI那样的监听功能
- (void) downloadFile {
// 1.创建请求管理者
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
// 设置序列化器
[manager setResponseSerializer:[AFHTTPResponseSerializer serializer]]; // 使用二进制数据序列化
// 3.发送请求
[manager GET:@"http://192.168.0.21:8080/MyTestServer/images/images.zip" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"请求成功");
NSLog(@"返回的数据类型是:%@", [responseObject class]);
NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
NSString *filePath = [cachePath stringByAppendingPathComponent:@"download.zip"];
NSData *data = (NSData *) responseObject;
[data writeToFile:filePath atomically:YES];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"请求失败");
NSLog(@"%@", error);
}];
}
- 使用POST请求,带formData的post方法
- 要区分普通参数和文件参数,把文件数据放在普通参数中上传是不行的
- 文件放在block参数中赋值
/** 上传文件 */
- (void) uploadFile {
// 1.创建请求管理者
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; // 2.设置参数
NSMutableDictionary *param = [NSMutableDictionary dictionary];
param[@"user"] = @"uploader"; // 3.设置上传文件
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"M2.jpg" ofType:nil];
NSData *fileData = [NSData dataWithContentsOfFile:filePath]; // 4.上传文件
__weak typeof(fileData) uploadData = fileData; [manager POST:@"http://192.168.0.21:8080/MyTestServer/upload" parameters:param constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { // 拼接文件数据
[formData appendPartWithFileData:uploadData name:@"uploadedFile" fileName:@"my_pic.jpg" mimeType:@"image/jpg"]; } success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"上传成功 ---- %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"上传失败 ---- %@", error);
}];
}
- (IBAction)monitorNetwork:(UIButton *)sender {
// 1.创建网络状态监控管理者
AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
// 2.网络状态改变事件(被动检测)
[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
case AFNetworkReachabilityStatusUnknown:
NSLog(@"转换为未知网络");
break;
case AFNetworkReachabilityStatusReachableViaWWAN:
NSLog(@"转换为手机网络");
break;
case AFNetworkReachabilityStatusReachableViaWiFi:
NSLog(@"转换为WIFI网络");
break;
case AFNetworkReachabilityStatusNotReachable:
NSLog(@"转换为没有网络");
break;
default:
break;
}
}];
// 开启监控
[manager startMonitoring];
// 主动检测
if ([manager isReachable]) {
NSLog(@"现在有网络");
} else if ([manager isReachableViaWiFi]) {
NSLog(@"现在是通过wifi上网");
} else if ([manager isReachableViaWWAN]) {
NSLog(@"现在是通过手机网络上网");
} else {
NSLog(@"现在没有网络");
}
}
[iOS 多线程 & 网络 - 4.0] - AFN框架简单使用的更多相关文章
- [iOS 多线程 & 网络 - 2.0] - 发送接收 服务器信息
A.搭建java服务器 使用eclipse.tomcat和struts2框架搭建一个简单的服务器 1.准备好合适版本的JDK.eclipse EE.tomcat.struts2 框架包 2.配置JDK ...
- [iOS 多线程 & 网络 - 1.0] - 多线程概述
A.进程 什么是进程进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcode,系统就会分别启动2个进程 通过"活 ...
- [iOS 多线程 & 网络 - 2.10] - ASI框架下载文件
A.ASI框架中的下载 1.实现步骤 在实际的开发中如果要使用asi框架来下载服务器上的文件,只需要执行下面简单的几个步骤即可. (1)创建请求对象:(2)设置下载文件保存的路径:(3)发送下载文件的 ...
- [iOS 多线程 & 网络 - 2.9] - ASI框架
A.ASI基本知识 1.ASI简单介绍 ASI:全称是ASIHTTPRequest,外号“HTTP终结者”,功能十分强大. ASI的实现基于底层的CFNetwork框架,因此运行效率很高. ASI的g ...
- [iOS 多线程 & 网络 - 2.11] - ASI框架上传文件
A.ASI的上传功能基本使用 1.实现步骤 (1)创建请求 使用ASIFormDataRequest (2)设置上传文件路径 (3)发送请求 2.上传相册相片 UIImagePickerCon ...
- [iOS 多线程 & 网络 - 3.0] - 在线动画Demo
A.需求 所有数据都从服务器下载 动画列表包含:图片.动画名标题.时长副标题 点击打开动画观看 code source: https://github.com/hellovoidworld/Vid ...
- iOS开发网络篇—使用ASI框架进行文件下载
iOS开发网络篇—使用ASI框架进行文件下载 说明:本文介绍iOS网络编程中经常用到的框架ASI,如何使用该框架进行文件的下载. 一.简单介绍 代码示例: #import "YYViewCo ...
- AJ学IOS(55)多线程网络之图片下载框架之SDWebImage
AJ分享,必须精品 效果: 代码: - (NSArray *)apps { if (!_apps) { NSArray *dictArray = [NSArray arrayWithContentsO ...
- [iOS 多线程 & 网络 - 2.3] - 解析xml
A.XML基本知识 1.xml概念 什么是XML全称是Extensible Markup Language,译作“可扩展标记语言”跟JSON一样,也是常用的一种用于交互的数据格式一般也叫XML文档(X ...
随机推荐
- Go Deeper(2010成都现场赛题)(2-sat)
G - Go Deeper Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Description ...
- uva12230Crossing Rivers
数学期望. 过每条河的时间的可能在[L/v,3*L/v]间均匀分布,数学期望为2*L/v. 然后在加上在陆上走的时间. #include<cstdio> #include<algor ...
- UVa 11859 (Nim) Division Game
把每一行m个数所有的素因子看做一堆,就把问题转化为n堆的Nim游戏. 然后预处理一下10000以内每个数素因数的个数,再根据书上的Bouton定理,计算一下n行素因数个数的异或和. 为0是先手必败局面 ...
- 【转】iOS中定时器NSTimer的使用
原文网址:http://www.cnblogs.com/zhulin/archive/2012/02/02/2335866.html 1.初始化 + (NSTimer *)timerWithTimeI ...
- 动态加载so文件
在开发过程中,经常会用到第三方库,比如地图.视频.文档编辑.图表之类.依赖这些库,需要添加其SDK,有时需要用到jni层的So文件,比如百度地图等. 那么问题来了,如果两个不同的库之间的so文件发生冲 ...
- iOS-利用AFNetworking(AFN 1.x)-实现文件断点下载
转:http://www.kaifazhe.com/ios_school/380066.html 官方建议AFN的使用方法 1. 定义一个全局的AFHttpClient:包含有 1> baseU ...
- u-boot 源码修改 bootcmd,IP ,BOOTARGS等参数
uboot1.1.6\include\configs\smdk6410.h #define CONFIG_BOOTCOMMAND"nand read 0xc0008000 0x200000 ...
- 在PC上收发短信--Pidgin短信(Linux Pidgin插件)
Pidgin短信是Pidgin/empathy的一个插件.当手机收到短信进,电脑上面有提示:可以在电脑上发手机短信.让你时刻保持在电脑屏幕上,也不会错过短信.目前只支持安卓,wifi连接方式. 功能 ...
- 获取手机内存\可用内存\单个APP运行内存
/** 手机总内存 */ private String getTotalMemory() { // 系统内存信息文件 String str1 = "/proc/meminfo"; ...
- [原创]谷歌插件 - YE搜图助手(YeImageFinder)
最新版本:下载 版本:v1.5 更新时间:2014年10月08日 +完善了:YeImageFinder:支持在每次启用插件时,也能正常绑定右键! +完善了:每次做完动作后,就马上关闭自身! 版本:v ...