AFNetworking

什么是AFN

全称是AFNetworking,是对NSURLConnection的一层封装
虽然运行效率没有ASI高,但是使用比ASI简单
在iOS开发中,使用比较广泛

AFN的版本选择

AFN的版本选择

AFHTTPSessionManager

  • AFHTTPSessionManager

    是AFN中最重要的对象之一 封装了HTTP请求的常见处理 GET\POST请求 解析服务器的响应数据

  • 创建

    AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager];
    

GET\POST请求

  • GET请求
    -(NSURLSessionDataTask *)GET:(NSString *)URLString
                     parameters:(id)parameters
                     success:(void (^)(NSURLSessionDataTask *task, id responseObject))success
                     failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure
    
  • POST请求
    -(NSURLSessionDataTask *)POST:(NSString *)URLString
                     parameters:(id)parameters
                     success:(void (^)(NSURLSessionDataTask *task, id responseObject))success
                     failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure
    

文件上传

 - (NSURLSessionDataTask *)POST:(NSString *)URLString
                    parameters:(id)parameters
     constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block
                    success:(void (^)(NSURLSessionDataTask *task, id responseObject))success
                    failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure

监控联网状态

AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
[manager startMonitoring];

[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
    NSLog(@"%d", status);
}];

提示:要监控网络连接状态,必须要先调用单例的startMonitoring方法

简单使用

get请求

    AFHTTPSessionManager * manager = [AFHTTPSessionManager manager];
    NSDictionary  * parameters = @{
                                 @"username": @"520it",
                                 @"pwd"     : @"520it"
                                 };
    [manager GET:@"http://120.25.226.186:32812/login" parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSLog(@"%@",responseObject);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"%@",error);
    }];

文件上传

文件上传写到block里面,需要设置mimeType名等,参数需要写到外面

- (void)upload {

    AFHTTPSessionManager * manager = [AFHTTPSessionManager manager];

    [manager POST:@"http://120.25.226.186:32812/upload" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {

    // 上传多个文件,就写多次就好
        NSData * data;
        // 在这个block中设置需要上传的文件
        // name:参数名
        // fileName:文件名(服务器端会接收文件名)
        // mimeType:类型
//        [formData appendPartWithFileData:data name:@"file" fileName:@"test.png" mimeType:@"image/png"];


//        [formData appendPartWithFileURL:[NSURL fileURLWithPath:<#(nonnull NSString *)#>] name:<#(nonnull NSString *)#> fileName:<#(nonnull NSString *)#> mimeType:<#(nonnull NSString *)#> error:<#(NSError *__autoreleasing  _Nullable * _Nullable)#>]



//         文件名直接为获取当前文件目录的lastPathComponent
//        [formData appendPartWithFileURL:[NSURL fileURLWithPath:<#(nonnull NSString *)#>] name:<#(nonnull NSString *)#> error:<#(NSError *__autoreleasing  _Nullable * _Nullable)#>]

    } progress:^(NSProgress * _Nonnull uploadProgress) {

    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSLog(@"%@",responseObject);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"%@",error);
    }];
}

返回数据为XML

- (void)xml {

    AFHTTPSessionManager * manager = [AFHTTPSessionManager manager];

    // 专门用来解析服务器返回数据,默认为JSON解析
    // 告诉AFN,以XML形式解析服务器返回的数据
    manager.responseSerializer = [AFXMLParserResponseSerializer serializer];

    NSDictionary  * parameters = @{
                                 @"username": @"520it",
                                 @"pwd"     : @"520it",
                                 @"type"    : @"XML"
                                 };
    [manager GET:@"http://120.25.226.186:32812/login" parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSLog(@"%@",responseObject);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"%@",error);
    }];

}

返回服务器原本数据(例如是图片,返回为data)

- (void)get {

    AFHTTPSessionManager * manager = [AFHTTPSessionManager manager];

    // 专门用来解析服务器返回数据,默认为JSON解析
    // 直接使用“服务器本来返回的数据”,不做任何解析
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];

    //    [AFJSONResponseSerializer serializer]; // 解析服务器返回的JSON数据
    //    [AFXMLParserResponseSerializer serializer]; // 解析服务器返回的XML数据

    NSDictionary  * parameters = @{
                                 @"username": @"520it",
                                 @"pwd"     : @"520it",
                                 @"type"    : @"XML"
                                 };
    [manager GET:@"http://120.25.226.186:32812/login" parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSLog(@"%@",responseObject);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"%@",error);
    }];

}

网络监控

// 开始监控网络状态
    AFNetworkReachabilityManager * manager = [AFNetworkReachabilityManager sharedManager];
    [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        NSLog(@"当前的网络状态");
    }];
    [manager startMonitoring];

苹果自带

检测网络状态

  • 在网络应用中,需要对用户设备的网络状态进行实时监控,目的是

    • 让用户了解自己的网络状态,防止一些误会(比如怪应用无能)
    • 根据用户的网络状态进行智能处理,节省用户流量,提高用户体验
    • WIFI\3G网络:自动下载高清图片
    • 低速网络:只下载缩略图
    • 没有网络:只显示离线的缓存数据
  • 苹果官方提供了一个叫Reachability的示例程序,便于开发者检测网络状态 Reachability

Reachability

Reachability

常见用法

// 是否WIFI
+ (BOOL) IsEnableWIFI {
    return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable);
}
// 是否3G
+ (BOOL) IsEnable3G {
    return ([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] != NotReachable);
}

网络监控

- (void)appleMonitoring
{
    // 监听通知
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getNetworkStatus) name:kReachabilityChangedNotification object:nil];

    // 开始监控网络
    self.reachability = [Reachability reachabilityForInternetConnection];
    [self.reachability startNotifier];
}

- (void)dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];

    [self.reachability stopNotifier];
    self.reachability = nil;
}

- (void)getNetworkStatus
{
    if ([Reachability reachabilityForLocalWiFi].currentReachabilityStatus != NotReachable) {
        NSLog(@"是wifi");
    } else if ([Reachability reachabilityForInternetConnection].currentReachabilityStatus != NotReachable) {
        NSLog(@"是手机自带网络");
    } else {
        NSLog(@"网络有问题");
    }
}}

// 这个不是监控,只是检测用,例如当启动的时候判断网路状态。(主动获取)
  if ([Reachability reachabilityForLocalWiFi].currentReachabilityStatus != NotReachable) {
        NSLog(@"是wifi");
    } else if ([Reachability reachabilityForInternetConnection].currentReachabilityStatus != NotReachable) {
        NSLog(@"是手机自带网络");
    } else {
        NSLog(@"网络有问题");
    }

results matching ""

    No results matching ""