AFNetWorking-网络库-之初体验

//
//  ViewControllerA.m
//  AFNetWorking
//
//  Created by bch on 15-3-26.
//  Copyright (c) 2015年 白超华. All rights reserved.
//

#import "ViewControllerA.h"
#import "AFNetworking.h"
//定义2个URL
#define BOOK_URL @"https://api.douban.com/v2/book/1220562"
#define MP3_URL @"http://music.baidu.com/data/music/file?link=http://yinyueshiting.baidu.com/data2/music/239130183/1226741191427176861128.mp3?xcode=1a50de6b8c4eec19c5954e4e3dcd15d9c3ba3c8b80064e3b&song_id=122674119"

@interface ViewControllerA ()

@end

@implementation ViewControllerA

- (void)viewDidLoad {
    [super viewDidLoad];
    
#if 0
    //获取请求管理器(单例),亲 这是一个单例哦
    
    AFHTTPRequestOperationManager * manager=[AFHTTPRequestOperationManager manager];
    
    //发送请求
    /*
     参数1:URL地址
     参数2:参数
     */
    //GET请求:服务器解析URL的过程,GET请求有长度限制,最大不能超过2KB,GET请求设计的初衷是用来向服务器获取数据的,但是实际应用中,可以上传少量数据
    //POST请求:POST请求上传的数据量长度没有限制,POST请求相对GET请求来说更安全,设计初衷就是用来上传上传数据,但是实际应用中,也可以下载少量的数据
    
    NSDictionary *dic=@{@"apikey":@"02970273f8e1e22a07c5075beaa5a67e"};
    //https://api.douban.com/v2/book/1220562?apikey=02970273f8e1e22a07c5075beaa5a67e
    
    //发送请求
    //直接获取URL,而返回的responseObject则是服务器解析好的JSON数据.
    //字典中可能就是GET方法要上传的少量数据
    [manager GET:BOOK_URL parameters:dic success:^(AFHTTPRequestOperation *operation, id responseObject) {
        //如果请求成功(就会调用这个方法)(网络请求需要时间)
        //responseObject返回的资源数据
        
        NSLog(@"responseObject = %@",responseObject);
        
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        //如果请求失败(就会调用这个方法)
    }];
#endif
    //获取请求管理器 (单例)
    AFHTTPRequestOperationManager * manager=[AFHTTPRequestOperationManager manager];
    
    //修改返回类型(默认请求返回的是JSON数据)
    //修改返回类型为二进制
    manager.responseSerializer=[AFHTTPResponseSerializer serializer];
    
    
    
    
    //利用管理器来发送请求
    //请求的线程
    //开启网络请求状态
    [[UIApplication sharedApplication]setNetworkActivityIndicatorVisible:YES];
    AFHTTPRequestOperation * op=   [manager GET:MP3_URL parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"请求成功");
        NSData * data=(NSData *)responseObject;
        [data writeToFile:@"Users/qianfeng01/Desktop/hello.mp3" atomically:YES];
        //下载完毕就关闭网络请求状态
        [[UIApplication sharedApplication]setNetworkActivityIndicatorVisible:NO];
        
        
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        [[UIApplication sharedApplication]setNetworkActivityIndicatorVisible:NO];
        NSLog(@"请求失败!");
    }];
    
    //设置查看下载进度
    [op setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) {
        NSLog(@"bytesRead = %lu",bytesRead);//每次下载的数据量
        NSLog(@"totalBytesRead = %lld",totalBytesRead);//已经下载的数据量
        NSLog(@"totalBytesExpectedToRead = %lld",totalBytesExpectedToRead);//总大小
        
    }];
    //开启网络监测状态(网络可达性管理器)[分享监听器]
    [[AFNetworkReachabilityManager sharedManager]startMonitoring];
    //开始连接网络进行监测
    [[AFNetworkReachabilityManager sharedManager]setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        //监测成功会调用这个方法

   /**


     AFNetworkReachabilityStatusUnknown          = -1,  // 未知


     AFNetworkReachabilityStatusNotReachable     = 0,   // 无连接


     AFNetworkReachabilityStatusReachableViaWWAN = 1,   // 3G 花钱


     AFNetworkReachabilityStatusReachableViaWiFi = 2,   // 局域网络,不花钱


     */


NSLog(@"网络状态为:%@",AFStringFromNetworkReachabilityStatus(status)); }]; } @end

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。