代码演练
常规代码演练
- (void)postLogin {
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
NSDictionary *params = @{@"username": @"张三&李四", @"password": @"123"};
[mgr POST:@"http://localhost/login.php" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"POST Login %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%@", error);
}];
}
- (void)getLogin2 {
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
NSDictionary *params = @{@"username": @"张三&李四", @"password": @"123"};
[mgr GET:@"http://localhost/login.php" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"GET Login %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%@", error);
}];
}
- (void)getLogin1 {
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
[mgr GET:@"http://localhost/login.php?username=zhangsan&password=123" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"%@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%@", error);
}];
}
- (void)getDemo {
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
[mgr GET:@"http://localhost/demo.json" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"%@ %@ %@", responseObject, [responseObject class], [NSThread currentThread]);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%@", error);
}];
}
演练小结
- 程序员不需要知道
URL
,直接使用 URL
字符串
- 自动实现
JSON
的反序列化
- 网络访问完成的回调,是在主线程,程序员不需要考虑线程间通讯
URL
的参数可以使用 字典
的形式拼接,程序员不在需要考虑 url
的格式
- 程序员不需要考虑百分号转义
- OC中的百分号转义是有缺陷的,特殊字符(空格 &)或者中文需要添加百分号转义
- 程序员不需要知道
HTTP
方法,只需要挑选单词即可!
XML 解析
tools.responseSerializer = [AFHTTPResponseSerializer serializer];
tools.responseSerializer = [AFXMLParserResponseSerializer serializer];
多值参数
NetworkTools *tools = [NetworkTools sharedNetworkTools];
NSDictionary *params = @{@"city": @[@"bj", @"sh", @"gz"]};
[tools GET:@"weather.php" parameters:params success:^(NSURLSessionDataTask *task, id responseObject) {
NSLog(@"%@", responseObject);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@"%@", error);
}];
PUT 上传 & 进度跟进
- (void)putupload {
NetworkTools *tools = [NetworkTools sharedNetworkTools];
NSString *urlString = @"http://localhost/uploads/321.png";
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
request.HTTPMethod = @"PUT";
NSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"001.png" withExtension:nil];
NSProgress *progress = nil;
[[tools uploadTaskWithRequest:request fromFile:fileURL progress:&progress completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
NSLog(@"%@ %@", response, responseObject);
}] resume];
[progress addObserver:self forKeyPath:@"completedUnitCount" options:NSKeyValueObservingOptionNew context:nil];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if ([object isKindOfClass:[NSProgress class]]) {
NSProgress *progress = object;
NSLog(@"%@ - %@ - %f", progress.localizedDescription, progress.localizedAdditionalDescription, progress.fractionCompleted);
}
}
网络连接状态监听
[tools.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
NSLog(@"%zd", status);
switch (status) {
case AFNetworkReachabilityStatusNotReachable:
NSLog(@"没有连接");
break;
case AFNetworkReachabilityStatusReachableViaWiFi:
NSLog(@"WI-FI");
break;
case AFNetworkReachabilityStatusReachableViaWWAN:
NSLog(@"3G");
break;
default:
NSLog(@"未知");
break;
}
}];
[tools.reachabilityManager startMonitoring];