iOS讲解迷惑--AFNetworking的使用

利用cocoaPods安装AFNetworking比较方便: http://blog.csdn.net/nlynn/article/details/49705101


创建AFN管理者

 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

 

  默认请求二进制

  默认响应是JSON

 

  告诉AFN,支持接受 text/x

  [AFJSONResponseSerializer serializer].acceptableContentTypes = [NSSet

 setWithObject:@"text/xml"];

 

  告诉AFN如何解析数据

  告诉AFN客户端, 将返回的数据当做JSON来处理,默认的是以JSON处理

     manager.responseSerializer = [AFJSONResponseSerializer serializer];

  告诉AFN客户端, 将返回的数据当做XML来处理

     manager.responseSerializer = [AFXMLParserResponseSerializer serializer];

  告诉AFN客户端, 服务器返回什么就是什么

 manager.responseSerializer = [AFHTTPResponseSerializer serializer];




1. 判断网络环境, 比如说你要播放视频的时候可以提醒用户: 您确定要使用3g网络播放视频吗, 还是切换到wifi?

#pragma mark -- 判断网络环境
- (void)reach
{
    
    /*
     AFNetworkReachabilityStatusUnknown          = -1,  未识别
     AFNetworkReachabilityStatusNotReachable     = 0,   未连接
     AFNetworkReachabilityStatusReachableViaWWAN = 1,   3G
     AFNetworkReachabilityStatusReachableViaWiFi = 2,  wifi
     */

    AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
    
    // 提示:要监控网络连接状态,必须要先调用单例的startMonitoring方法
    [manager startMonitoring];
    // 发生变化时
    [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {

        // status 枚举值, 如上面的注释
        
        NSLog(@"%ld", status);
  
        
    }];
}

2. get请求

#pragma mark -- get请求
- (void)getjson
{
//    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//    [manager GET:kActivityList parameters:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nonnull responseObject) {
//        NSLog(@"%@", responseObject);  // 这个接口的类型是 text/html
//    } failure:^(NSURLSessionDataTask * _Nonnull task, NSError * _Nonnull error) {
//        NSLog(@"-----%@", error);
//    }];
    NSString *string = [kSearchURL stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
    NSLog(@"%@", string);
    NSURL *URL = [NSURL URLWithString:kActivityList];
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.requestSerializer = [AFHTTPRequestSerializer serializer];
    [manager GET:URL.absoluteString parameters:nil success:^(NSURLSessionTask *task, id responseObject) {
        NSLog(@"JSON: %@", responseObject);
        
        /// 解析出来的model
//        NSDictionary *bigDic = responseObject;
        
        
    } failure:^(NSURLSessionTask *operation, NSError *error) {
        NSLog(@"Error: %@", error);
    }];
}

3. post请求

- (void)post
{
    // 1.创建AFN管理者
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    
    // 2.利用AFN管理者发送请求
    NSDictionary *params = @{
                             @"date" : @"20151102",
                             @"startRecord" : @"1",
                             @"len" : @"30",
                             @"udid" : @"1234567890",
                             @"terminalType" : @"Iphone",
                             @"cid" : @"213"
                             };
    // date=20151102&startRecord=1&len=30&udid=1234567890&terminalType=Iphone&cid=213
    [manager POST:kNewsListURL parameters:params success:^
     (NSURLSessionDataTask *task, id responseObject) {
         NSLog(@"请求成功---%@", responseObject);
     } failure:^(NSURLSessionDataTask *task, NSError *error) {
         NSLog(@"请求失败---%@", error);
     }];
}

4. 文件下载

#pragma mark -- 文件下载
// 执行下载文件的方法,可以监控下载进度
- (void)downLoadMonitor
{
    // 1.创建网络管理者
    // AFHTTPSessionManager 基于NSURLSession
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
   // NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
    // 2.利用网络管理者下载数据
    // 视频的网址
    
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:kImageURL]];
    /*
     
     destination
     - targetPath: 系统给我们自动写入的文件路径
     - block的返回值, 要求返回一个URL, 返回的这个URL就是剪切的位置的路径
     completionHandler
     - url :destination返回的URL == block的返回的路径
     */
    /*
     @property int64_t totalUnitCount;  需要下载文件的总大小
     @property int64_t completedUnitCount; 当前已经下载的大小
     */
    NSProgress *progress = nil;
    NSURLSessionDownloadTask *downTask = [manager downloadTaskWithRequest:request progress:&progress destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
        // 缓存文件,如果想将缓存文件存到磁盘 SDURLCache
        NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
        NSString *path = [cachesPath stringByAppendingPathComponent:response.suggestedFilename];
        
        NSLog(@"%@", path);
        
        return [NSURL fileURLWithPath:path];
                                                                     
    } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
        NSLog(@"%@",filePath.absoluteString);
    }];
    
 
    
    /* 
     要跟踪进度,需要使用 NSProgress,是在 iOS 7.0 推出的,专门用来跟踪进度的类! 
     NSProgress只是一个对象!如何跟踪进度!-> KVO 对属性变化的监听! 
     @property int64_t totalUnitCount;        总单位数 
     @property int64_t completedUnitCount;    完成单位数 
     */  
    // 给Progress添加监听 KVO  
    [progress addObserver:self forKeyPath:@"completedUnitCount"   
                  options:NSKeyValueObservingOptionNew context:nil];  
    
    // 启动任务
    [downTask resume];  
    
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    NSLog(@"%@", change);
    
    
}

5、 文件上传

#pragma mark -- 文件上传
- (void)upload
{
    // 1.创建网络管理者
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    // 2.利用网络管理者上传数据
    NSDictionary *dict = @{@"username":@"Syl"};
    // formData: 专门用于拼接需要上传的数据
    [manager POST:@"http://120.25.226.186:32812/upload" parameters:dict
constructingBodyWithBlock:
     ^void(id formData) {
         
         /*
          Data: 需要上传的数据
          name: 服务器参数的名称
          fileName: 文件名称
          mimeType: 文件的类型
          */
         UIImage *image =[UIImage imageNamed:@"hetu"];
         NSData *data = UIImagePNGRepresentation(image);
         [formData appendPartWithFileData:data name:@"file" fileName:@"hetu.png"
                                 mimeType:@"image/png"];
         
         /*
          NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/
          CertificateSigningRequest.certSigningRequest"];
          // 任意的二进制数据MIMEType application/octet-stream
          // [formData appendPartWithFileURL:url name:@"file" fileName:@"abc.cer"
          mimeType:@"application/octet-stream" error:nil];
          [formData appendPartWithFileURL:url name:@"file" error:nil];
          */
     } success:^void(NSURLSessionDataTask * task, id responseObject) {
         // 请求成功
         NSLog(@"请求成功 %@", responseObject);
     } failure:^void(NSURLSessionDataTask * task, NSError * error) {  
         // 请求失败  
         NSLog(@"请求失败 %@", error);  
     }];
    
    
}


你可能感兴趣的:(iOS)