首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
Web开发
> 详细
AFNetwork 作用和用法详解
时间:
2015-07-15 12:59:27
阅读:
147
评论:
0
收藏:
0
[点我收藏+]
标签:
AFNetwork 作用和用法详解
分类:
ios
2014-07-24 16:54
24386人阅读
评论
(7)
收藏
举报
AFNetworking是一个轻量级的iOS网络通信类库
。它
建立在NSURLConnection和NSOperation等类库
的基础上,让很多网络通信功能的实现变得十分简单。它支持HTTP请求和基于REST的网络服务(包括GET、POST、 PUT、DELETE等)。支持ARC。
Github
地址:
https://github.com/AFNetworking/AFNetworking
[objc]
view plain
copy
//
// MJViewController.m
// 03.AFN演练
//
// Created by apple on 14-4-30.
// Copyright (c) 2014年 itcast. All rights reserved.
//
#import "MJViewController.h"
#import "AFNetworking.h"
@interface MJViewController ()
@end
@implementation MJViewController
/**
要使用常规的AFN网络访问
1. AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
所有的网络请求,均有manager发起
2. 需要注意的是,默认提交请求的数据是二进制的,返回格式是JSON
1> 如果提交数据是JSON的,需要将请求格式设置为AFJSONRequestSerializer
2> 如果返回格式不是JSON的,
3. 请求格式
AFHTTPRequestSerializer 二进制格式
AFJSONRequestSerializer JSON
AFPropertyListRequestSerializer PList(是一种特殊的XML,解析起来相对容易)
4. 返回格式
AFHTTPResponseSerializer 二进制格式
AFJSONResponseSerializer JSON
AFXMLParserResponseSerializer XML,只能返回XMLParser,还需要自己通过代理方法解析
AFXMLDocumentResponseSerializer (Mac OS X)
AFPropertyListResponseSerializer PList
AFImageResponseSerializer Image
AFCompoundResponseSerializer 组合
*/
- (
void)viewDidLoad
{
[
super
viewDidLoad];
[
self
reach];
}
#pragma mark - 演练
#pragma mark - 检测网络连接
- (
void)reach
{
/**
AFNetworkReachabilityStatusUnknown = -1, // 未知
AFNetworkReachabilityStatusNotReachable = 0, // 无连接
AFNetworkReachabilityStatusReachableViaWWAN = 1, // 3G 花钱
AFNetworkReachabilityStatusReachableViaWiFi = 2, // 局域网络,不花钱
*/
// 如果要检测网络状态的变化,必须用检测管理器的单例的startMonitoring
[[AFNetworkReachabilityManager
sharedManager]
startMonitoring];
// 检测网络连接的单例,网络变化时的回调方法
[[AFNetworkReachabilityManager
sharedManager]
setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
NSLog(
@"%d", status);
}];
}
#pragma mark - Session 下载
- (
void)sessionDownload
{
NSURLSessionConfiguration *config = [NSURLSessionConfiguration
defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager
alloc]
initWithSessionConfiguration:config];
NSString *urlString =
@"http://localhost/itcast/videos/01.C语言-语法预览.mp4";
urlString = [urlString
stringByAddingPercentEscapesUsingEncoding:NSUTF
8StringEncoding];
NSURL *url = [NSURL
URLWithString:urlString];
NSURLRequest *request = [NSURLRequest
requestWithURL:url];
NSURLSessionDownloadTask *task = [manager
downloadTaskWithRequest:request
progress
:nil
destination:^
NSURL *(
NSURL *targetPath,
NSURLResponse *response) {
// 指定下载文件保存的路径
// NSLog(@"%@ %@", targetPath, response.suggestedFilename);
// 将下载文件保存在缓存路径中
NSString *cacheDir = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask,
YES)[
0];
NSString *path = [cacheDir
stringByAppendingPathComponent:response
.suggestedFilename];
// URLWithString返回的是网络的URL,如果使用本地URL,需要注意
NSURL *fileURL
1 = [NSURL
URLWithString:path];
NSURL *fileURL = [NSURL
fileURLWithPath:path];
NSLog(
@"== %@ |||| %@", fileURL
1, fileURL);
return fileURL;
}
completionHandler:^(
NSURLResponse *response,
NSURL *filePath,
NSError *error) {
NSLog(
@"%@ %@", filePath, error);
}];
[task
resume];
}
#pragma mark - POST JSON
- (
void)postJSON
{
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager
manager];
NSDictionary *dict = @{
@"name":
@"zhangsan"};
NSDictionary *dict
1 = @{
@"name":
@"wangwu"};
NSArray *array = @[dict,
dict1];
// 设置请求格式
manager
.requestSerializer = [AFJSONRequestSerializer
serializer];
// 设置返回格式
manager
.responseSerializer = [AFHTTPResponseSerializer
serializer];
[manager
POST:
@"http://localhost/postjson.php"
parameters:array
success:^(
AFHTTPRequestOperation *operation,
id responseObject) {
NSString *result = [[NSString
alloc]
initWithData:responseObject
encoding:NSUTF
8StringEncoding];
NSLog(
@"%@", result);
}
failure:^(
AFHTTPRequestOperation *operation,
NSError *error) {
}];
}
#pragma mark - 随机文件名上传
- (
void)postUpload
1
{
// 本地上传给服务器时,没有确定的URL,不好用MD5的方式处理
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager
manager];
manager
.responseSerializer = [AFHTTPResponseSerializer
serializer];
[manager
POST:
@"http://localhost/demo/upload.php"
parameters
:nil
constructingBodyWithBlock:^(
id<AFMultipartFormData> formData) {
NSURL *fileURL = [[NSBundle
mainBundle]
URLForResource:
@"头像1.png"
withExtension
:nil];
// 要上传保存在服务器中的名称
// 使用时间来作为文件名 2014-04-30 14:20:57.png
// 让不同的用户信息,保存在不同目录中
NSDateFormatter *formatter = [[NSDateFormatter
alloc]
init];
// 设置日期格式
formatter
.dateFormat =
@"yyyy-MM-dd HH:mm:ss";
NSString *fileName = [formatter
stringFromDate:[NSDate
date]];
[formData
appendPartWithFileURL:fileURL
name:
@"uploadFile"
fileName:fileName
mimeType:
@"image/png"
error:
NULL];
}
success:^(
AFHTTPRequestOperation *operation,
id responseObject) {
NSLog(
@"OK");
}
failure:^(
AFHTTPRequestOperation *operation,
NSError *error) {
NSLog(
@"error");
}];
}
#pragma mark - POST上传
- (
void)postUpload
{
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager
manager];
// AFHTTPResponseSerializer就是正常的HTTP请求响应结果:NSData
// 当请求的返回数据不是JSON,XML,PList,UIImage之外,使用AFHTTPResponseSerializer
// 例如返回一个html,text...
//
// 实际上就是AFN没有对响应数据做任何处理的情况
manager
.responseSerializer = [AFHTTPResponseSerializer
serializer];
// formData是遵守了AFMultipartFormData的对象
[manager
POST:
@"http://localhost/demo/upload.php"
parameters
:nil
constructingBodyWithBlock:^(
id<AFMultipartFormData> formData) {
// 将本地的文件上传至服务器
NSURL *fileURL = [[NSBundle
mainBundle]
URLForResource:
@"头像1.png"
withExtension
:nil];
[formData
appendPartWithFileURL:fileURL
name:
@"uploadFile"
error:
NULL];
}
success:^(
AFHTTPRequestOperation *operation,
id responseObject) {
NSString *result = [[NSString
alloc]
initWithData:responseObject
encoding:NSUTF
8StringEncoding];
NSLog(
@"完成 %@", result);
}
failure:^(
AFHTTPRequestOperation *operation,
NSError *error) {
NSLog(
@"错误 %@", error
.localizedDescription);
}];
}
#pragma mark - JSON
- (
void)XMLData
{
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager
manager];
// 返回的数据格式是XML
manager
.responseSerializer = [AFXMLParserResponseSerializer
serializer];
NSDictionary *dict = @{
@"format":
@"xml"};
// 网络访问是异步的,回调是主线程的,因此程序员不用管在主线程更新UI的事情
[manager
GET:
@"http://localhost/videos.php"
parameters:dict
success:^(
AFHTTPRequestOperation *operation,
id responseObject) {
// 如果结果是XML,同样需要使用6个代理方法解析,或者使用第三方库
// 第三方库第三方框架,效率低,内存泄漏
NSLog(
@"%@", responseObject);
}
failure:^(
AFHTTPRequestOperation *operation,
NSError *error) {
NSLog(
@"%@", error);
}];
}
#pragma mark - JSON
- (
void)JSONData
{
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager
manager];
// 原本需要拼接get访问URL ? & =
NSDictionary *dict = @{
@"format":
@"json"};
// 网络访问是异步的,回调是主线程的,因此程序员不用管在主线程更新UI的事情
[manager
GET:
@"http://localhost/videos.php"
parameters:dict
success:^(
AFHTTPRequestOperation *operation,
id responseObject) {
NSLog(
@"%@", responseObject);
// 提问:NSURLConnection异步方法回调,是在子线程
// 得到回调之后,通常更新UI,是在主线程
NSLog(
@"%@", [NSThread
currentThread]);
}
failure:^(
AFHTTPRequestOperation *operation,
NSError *error) {
NSLog(
@"%@", error);
}];
}
#pragma mark - POST登录
- (
void)postLogin
{
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager
manager];
// 原本需要拼接get访问URL ? & =
NSDictionary *dict = @{
@"username":
@"wangwu",
@"password" :
@"wang"};
// 网络访问是异步的,回调是主线程的,因此程序员不用管在主线程更新UI的事情
[manager
POST:
@"http://localhost/login.php"
parameters:dict
success:^(
AFHTTPRequestOperation *operation,
id responseObject) {
NSLog(
@"%@", responseObject);
// 提问:NSURLConnection异步方法回调,是在子线程
// 得到回调之后,通常更新UI,是在主线程
NSLog(
@"%@", [NSThread
currentThread]);
}
failure:^(
AFHTTPRequestOperation *operation,
NSError *error) {
NSLog(
@"%@", error);
}];
}
#pragma mark - GET登录
- (
void)getLogin
{
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager
manager];
// 原本需要拼接get访问URL ? & =
NSDictionary *dict = @{
@"username":
@"wangwu",
@"password" :
@"wang"};
// 网络访问是异步的,回调是主线程的,因此程序员不用管在主线程更新UI的事情
[manager
GET:
@"http://localhost/login.php"
parameters:dict
success:^(
AFHTTPRequestOperation *operation,
id responseObject) {
NSLog(
@"%@", responseObject);
// 提问:NSURLConnection异步方法回调,是在子线程
// 得到回调之后,通常更新UI,是在主线程
NSLog(
@"%@", [NSThread
currentThread]);
}
failure:^(
AFHTTPRequestOperation *operation,
NSError *error) {
NSLog(
@"%@", error);
}];
}
@end
AFNetwork 作用和用法详解
标签:
原文地址:http://www.cnblogs.com/zhuyiios/p/4647879.html
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
36.VUE — 认识 Webpack 和 安装
2021-07-28
【PHP】上传图片翻转问题
2021-07-28
php对数字进行万。亿的转化
2021-07-28
五个 .NET 性能小贴士
2021-07-28
Three.js中显示坐标轴、平面、球体、四方体
2021-07-28
.net 5+ 知新:【1】 .Net 5 基本概念和开发环境搭建
2021-07-27
1.html,css
2021-07-27
基于Docker搭建 Php-fpm + Nginx 环境
2021-07-27
nginx + http + svn
2021-07-27
kubernets kube-proxy的代理 iptables和ipvs
2021-07-26
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!