首页 > 代码库 > AFNetworking的使用
AFNetworking的使用
1.下载AFNetworking资源包 https://github.com/AFNetworking/AFNetworking。
2.将资源包添加到工程文件。
3.在工程的Supporting File群组中打开预编译头文件XXX-Prefix.pch。然后在别的import后面添加如下一行代码#import “AFNetworking”
将AFNetworking添加到预编译头文件,意味着这个框架会被自动的添加到工程的所有源代码文件中。
4.AFNetworking通过网络来加载和处理结构化的数据非常明智,它支持JSON,XML,Property List。
[plain] view plaincopyprint?
static NSString*const BaseURLString = @"http://www.raywenderlich.com/downloads/weather_sample/";
// 1
NSString *weatherUrl = [NSStringstringWithFormat:@"%@weather.php?format=json",BaseURLString];
NSURL *url = [NSURLURLWithString:weatherUrl];
NSURLRequest *request = [NSURLRequestrequestWithURL:url];
// 2
AFJSONRequestOperation *operation =
[AFJSONRequestOperationJSONRequestOperationWithRequest:request
success:^(NSURLRequest*request, NSHTTPURLResponse *response, id JSON) {
//
NSDictionary*dicWeather = (NSDictionary *)JSON;
NSLog(@"result:%@",dicWeather);
}
failure:^(NSURLRequest*request, NSHTTPURLResponse *response, NSError *error, id JSON) {
UIAlertView*alertView = [[UIAlertView alloc] initWithTitle:@"Error RetrievingWeather"
message:[NSStringstringWithFormat:@"%@",error]
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles: nil];
[alertView show];
}];
// 5
[operation start];
static NSString*const BaseURLString = @"http://www.raywenderlich.com/downloads/weather_sample/"; // 1 NSString *weatherUrl = [NSStringstringWithFormat:@"%@weather.php?format=json",BaseURLString]; NSURL *url = [NSURLURLWithString:weatherUrl]; NSURLRequest *request = [NSURLRequestrequestWithURL:url]; // 2 AFJSONRequestOperation *operation = [AFJSONRequestOperationJSONRequestOperationWithRequest:request success:^(NSURLRequest*request, NSHTTPURLResponse *response, id JSON) { // NSDictionary*dicWeather = (NSDictionary *)JSON; NSLog(@"result:%@",dicWeather); } failure:^(NSURLRequest*request, NSHTTPURLResponse *response, NSError *error, id JSON) { UIAlertView*alertView = [[UIAlertView alloc] initWithTitle:@"Error RetrievingWeather" message:[NSStringstringWithFormat:@"%@",error] delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil]; [alertView show]; }]; // 5 [operation start];
(1)根据基本的URL构造除完整的一个URL,然后通过这个完整的URL获得一个NSURL对象,然后根据这个url获得一个NSURLRequest。
(2)AFJSONRequestOperation是一个完整的类,整合了从网络中获取数据并对JSON进行解析。
(3)当请求成功,则运行成功块。在本例中,把解析出来的天气数据从JSON变量转换为一个字典(dictionary),并将其存储在字典中。
(4)如果运行出问题了,则运行失败块(failure block),比如网络不可用。如果failure block被调用了,将会通过提示框显示错误信息。
6.AFNetWorking异步加载图片
[plain] view plaincopyprint?
(1)#import “UIImageView+AFNetworking.h”
(2)UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(40, 80, 40, 40)];
__weak UIImageView *_imageView = imageView;
[imageViewsetImageWithURLRequest:[[NSURLRequest alloc] initWithURL:[NSURLURLWithString:@"http://www.worldweatheronline.com/images/wsymbols01_png_64/wsymbol_0001_sunny.png"]]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]
success:^(NSURLRequest *request,NSHTTPURLResponse *response, UIImage *image) {
_imageView.image = image;
[_imageView setNeedsDisplay];
}
failure:^(NSURLRequest *request, NSHTTPURLResponse*response, NSError *error) {
;
}];
[self.view addSubview:imageView];
(1)#import “UIImageView+AFNetworking.h” (2)UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(40, 80, 40, 40)]; __weak UIImageView *_imageView = imageView; [imageViewsetImageWithURLRequest:[[NSURLRequest alloc] initWithURL:[NSURLURLWithString:@"http://www.worldweatheronline.com/images/wsymbols01_png_64/wsymbol_0001_sunny.png"]] placeholderImage:[UIImage imageNamed:@"placeholder.png"] success:^(NSURLRequest *request,NSHTTPURLResponse *response, UIImage *image) { _imageView.image = image; [_imageView setNeedsDisplay]; } failure:^(NSURLRequest *request, NSHTTPURLResponse*response, NSError *error) { ; }]; [self.view addSubview:imageView];
7.GET 和POST请求
(1).构建一个baseURL,以及一个参数字典,并将这两个变量传给AFHTTPClient.
(2).将AFJSONRequestOperation注册为HTTP的操作, 这样就可以跟之前的示例一样,可以获得解析好的JSON数据。
(3).做了一个GET请求,这个请求有一对block:success和failure。
(4).POST请求跟GET一样
[plain] view plaincopyprint?
AFHTTPClient *client= [[AFHTTPClient alloc] initWithBaseURL:baseURL];
[clientregisterHTTPOperationClass:[AFJSONRequestOperation class]];
[clientsetDefaultHeader:@"Accept" value:@"application/json"];
[client postPath:@"weather.php"
parameters:parameters
success:^(AFHTTPRequestOperation *operation, id responseObject) {
self.weather =responseObject;
self.title = @"HTTPPOST";
[self.tableViewreloadData];
}
failure:^(AFHTTPRequestOperation *operation, NSError*error) {
UIAlertView *av =[[UIAlertView alloc] initWithTitle:@"Error Retrieving Weather"
message:[NSStringstringWithFormat:@"%@",error]
delegate:nil
cancelButtonTitle:@"OK" otherButtonTitles:nil];
[av show];
}
];
[client getPath:@"weather.php"
parameters:parameters
success:^(AFHTTPRequestOperation *operation, id responseObject) {
self.weather =responseObject;
self.title = @"HTTP GET";
[self.tableViewreloadData];
}
failure:^(AFHTTPRequestOperation *operation, NSError*error) {
UIAlertView *av =[[UIAlertView alloc] initWithTitle:@"Error Retrieving Weather"
message:[NSStringstringWithFormat:@"%@",error]
delegate:nil
cancelButtonTitle:@"OK" otherButtonTitles:nil];
[av show];
}
];
AFHTTPClient *client= [[AFHTTPClient alloc] initWithBaseURL:baseURL]; [clientregisterHTTPOperationClass:[AFJSONRequestOperation class]]; [clientsetDefaultHeader:@"Accept" value:@"application/json"]; [client postPath:@"weather.php" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { self.weather =responseObject; self.title = @"HTTPPOST"; [self.tableViewreloadData]; } failure:^(AFHTTPRequestOperation *operation, NSError*error) { UIAlertView *av =[[UIAlertView alloc] initWithTitle:@"Error Retrieving Weather" message:[NSStringstringWithFormat:@"%@",error] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [av show]; } ]; [client getPath:@"weather.php" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { self.weather =responseObject; self.title = @"HTTP GET"; [self.tableViewreloadData]; } failure:^(AFHTTPRequestOperation *operation, NSError*error) { UIAlertView *av =[[UIAlertView alloc] initWithTitle:@"Error Retrieving Weather" message:[NSStringstringWithFormat:@"%@",error] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [av show]; } ];
8.AFNetworking更新背景图片
Note:
AFJSONOperation,AFPropertyListOperation, AFXMLOperation用来解析结构化数据。
UIImageView+AFNetworking用来快捷的填充image view
AFHTTPClient用来进行更底层的请求
用自定义的AFHTTPClient子类来访问一个web service。
AFNetworkActivityIndicatiorManager用来给用户做出网络访问的提示。
AFImageRequestOperation用来加载图片。
AFNetworking的使用