您的位置:首页 > 理论基础 > 计算机网络

AFNetworking用法及网络监测

2015-11-19 21:16 453 查看
AFNetworking github : https://github.com/AFNetworking/AFNetworking

Reachability github : https://github.com/tonymillion/Reachability

先分别介绍一下 AFN 和 Reachability 如何进行网络监测

#import "AFNetworkReachabilityManager.h"

// 如果要检测网络状态的变化,必须用检测管理器的单例的startMonitoring
[[AFNetworkReachabilityManager sharedManager] startMonitoring];

// 检测网络连接的单例,网络变化时的回调方法
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {

NSLog(@"%ld",status);
}];

// 几种不同的网络状态
/*
AFNetworkReachabilityStatusUnknown          = -1,  // 未知
AFNetworkReachabilityStatusNotReachable     = 0,   // 无连接
AFNetworkReachabilityStatusReachableViaWWAN = 1,   // 无线
AFNetworkReachabilityStatusReachableViaWiFi = 2,   //  WiFi
*/


ps : 由于检测网络有一定的延迟,所以如果启动app立即去检测调用[AFNetworkReachabilityManager sharedManager].networkReachabilityStatus 有可能得到的是status == AFNetworkReachabilityStatusUnknown;但是此时明明是有网的,建议在收到监听网络状态回调以后再取[AFNetworkReachabilityManager sharedManager].networkReachabilityStatus。

Reachability

添加框架:SystemConfiguration.framework

#import "Reachability.h"

-(BOOL)isConnectionAvailable{

BOOL isExistenceNetwork = YES;
Reachability *reach = [Reachability reachabilityWithHostName:@"www.apple.com"];
switch ([reach currentReachabilityStatus]) {
case NotReachable:
isExistenceNetwork = NO;
//NSLog(@"notReachable");
break;
case ReachableViaWiFi:
{    isExistenceNetwork = YES;
//            UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"提示" message:@"5毛 wifi 5毛 wifi" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:nil, nil];
//            alert.delegate = self;
//            [alert show];

}

break;
case ReachableViaWWAN:
isExistenceNetwork = YES;
//NSLog(@"3G");
break;
}

if (!isExistenceNetwork) {

UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"提示" message:@"没有网络连接" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:nil, nil];
alert.delegate = self;
[alert show];

return NO;
}

return isExistenceNetwork;
}


如果需要实时的网络状态变化通知,需要用到异步的方式

具体请看: http://www.bubuko.com/infodetail-650914.html

AFNetworking 用法

//GET请求
#import"AFHTTPRequestOperationManager.h"
//  1 初始化
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
//  2 设置返回数据类型
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
// 3 请求
[manager GET:@"网址字符串" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {

// 请求成功代码
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
// 请求失败代码
}];

其中请求成功的话,就可以直接进行JSON解析

NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil];
NSLog(@"%@",dict);

//POST请求
#import"AFHTTPRequestOperationManager.h"
//  1 初始化
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
//  2 设置返回数据类型
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
// 3 请求
[manager POST:@"网址字符串" parameters:dict  //参数字典
success:^(AFHTTPRequestOperation *operation, id responseObject) {
// 请求成功代码
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
// 请求失败代码
}];

其中请求成功的话,就可以直接进行JSON解析

NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil];
NSLog(@"%@",dict);

/*
注意:
1 AFNetworking可以进行JSON数据解析/Plist数据解析.(不支持XML数据解析)

2 URL字符串中如果有特殊字符或者中文字符,AFNETWorking并没有做UTF8的转码,需要:url = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: