AFNetworking补充

这个博客很靠谱—--------用过这个的Post请求                                                                                      


2014-11-22 00:39 12人阅读 评论(0) 收藏 举报

//AFNetworking 网络库的使用

    //1. AFNetworking网路库的介绍

    //  通过HTTP接口获取数据,上传数据

    //  (1)NSURLConnection

    //  (2)ASIHttpRequest(较早,停止更新)

    //  (3)AFNetworking

    //          简单易用, 回调使用block

    //  AFNetworking是一个处理HTTP请求的,健壮(有一些小bug),易用的网络开源库

    

    //<2> 实现GET请求

    //[self testGetRequest];

    

    //<3> 实现POST请求

    //   GET请求: http://www.baidu.com/s?wd=小苹果

    //   POST请求:

    //       发送用户名和密码到服务器

    //       上传文件到服务器

    //  特点: 发送附加数据不会出现在URL网址中

    //          数据会附加到请求中发送

    

    

    //[self testPostRequest];

    

    //<4> 下载JSON数据, 下载XML数据(差不多)

    //[self testJSONRequest];

    

    //<5> 如何上传文件(上传图片文件)

    //[self testUploadFile];

    

    //<6> 如何下载文件+下载进度监视(KVO)

    //[self testDonwloadFile];

    

    //<7> 图片的异步加载

    //  可以使用 SDWebImage开源库

    //  还可以使用 AFNetworking 异步下载图片

    //[self testAsyncLoadImage];

    

    //<8> 判断网络状态

    [selftestNetworkStatus];


}

#pragma mark - 判断网络状态

-(void)testNetworkStatus

{

    //判断网络的原理: 和某个网址(www.baidu.com)进行连接

    //  注意: 填写域名即可

    AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManageralloc] initWithBaseURL:[NSURLURLWithString:@"www.baidu.com"]];

    [manager.reachabilityManagersetReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {

        //设置网络状态改变后执行的block

        

        //4种状态(未知,不可达,GPRS,WiFi)

        /*

         AFNetworkReachabilityStatusUnknown

         AFNetworkReachabilityStatusNotReachable

         AFNetworkReachabilityStatusReachableViaWWAN

         AFNetworkReachabilityStatusReachableViaWiFi

         */

        NSLog(@"当前网络状态为 %@",@[@"不可达",@"使用GPRS",@"使用WiFi"][status]);

        if(status == AFNetworkReachabilityStatusNotReachable)

        {

            UIAlertView *alertView = [[UIAlertView alloc] init];

            alertView.message = @",敢不敢打开网络?";

            [alertView addButtonWithTitle:@"取消"];

            [alertView show];

        }

    }];

    

    //开始启动网络状态的监听

    [manager.reachabilityManagerstartMonitoring];

}



#pragma mark - 图片的异步加载

-(void)testAsyncLoadImage

{

    

    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 200, 100, 200)];

    [self.view addSubview:imageView];

    

    //imageView添加图片, 图片来源于网络

    // http://image.baidu.com/channel/star?fm=index&image_id=9565527813#%E5%A5%B3%E6%98%8E%E6%98%9F%23%23%E5%86%85%E5%9C%B0&%E5%88%98%E4%BA%A6%E8%8F%B2&null&0

    NSString *urlString = @"http://img0.bdstatic.com/img/image/logo_cacece1e9a.png";

    [imageView setImageWithURL:[NSURL URLWithString:urlString]];

    

    /*

    [imageView setImageWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlString]] placeholderImage:nil success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {

        

        NSLog(@"加载完成");

        imageView.image = image;

        imageView.bounds = CGRectMake(100, 200, image.size.width, image.size.height);

        

    } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {

        NSLog(@"加载失败");

    }];

    */

}

#pragma mark - 如何下载文件

-(void)testDonwloadFile

{

    //文件网址

    NSString *urlString = @"http://imgcache.qq.com/club/item/avatar/zip/7/i87/all.zip";

    

    //下载使用的类 - AFURLSessionManager

    AFURLSessionManager *manager = [[AFURLSessionManageralloc] initWithSessionConfiguration:[NSURLSessionConfigurationdefaultSessionConfiguration]];

    

    //参数1: 下载文件的地址

    //参数2: 进度对象

    //参数3: block中返回下载文件存储位置

    //参数4: block下载完成后执行

    //进度类,

    //重要属性: fractionCompleted 完成百分比

    NSProgress *progress = nil;

    NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlString]] progress:&progress destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {

        

        //返回地址, 告诉manager文件存放在哪儿

        NSString *path = [NSStringstringWithFormat:@"%@/Documents/downfile.zip",NSHomeDirectory()];

        return [NSURL fileURLWithPath:path];

        

    } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {

        if(error == nil)

        {

            NSLog(@"下载完成");

        }

        else

        {

            NSLog(@"下载失败 error = %@",error);

        }

        

    }];

    //开始下载

    [downloadTask resume];

    

    //progress对象的fractionCompleted添加监听

    [progress addObserver:selfforKeyPath:@"fractionCompleted"options:NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNewcontext:nil];

    

    _progressView = [[UIProgressViewalloc] initWithFrame:CGRectMake(20, 100, 280, 20)];

    [self.viewaddSubview:_progressView];

}

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context

{

    float fractionCompleted = [[object valueForKey:@"fractionCompleted"] floatValue];

    NSLog(@"下载进度为 = %f%%",fractionCompleted*100);

    

    //注意:

    //以后说

    //  线程中: 工作线程中不能修改UI线程中的控件

    [[NSOperationQueuemainQueue] addOperationWithBlock:^{

        _progressView.progress = fractionCompleted;

    }];

    

}



#pragma mark - 实现上传文件

-(void)testUploadFile

{

    //接口:

    // http://quiet.local/uploadtest/pk.phpimage

    

    NSString *urlString = @"http://quiet.local/uploadtest/pk.php";

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManagermanager];

    manager.responseSerializer = [AFHTTPResponseSerializerserializer];

    [manager POST:urlString parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {

        

        //上传文件附加到 formData

        NSString *path = [[NSBundlemainBundle] pathForResource:@"menu_bg_01-hd.jpg"ofType:nil];

        

        //添加文件数据

        //参数1: 文件路径

        //参数2: 接口中数据的key

        //参数3: 上传后的文件名(不要重名)

        //参数4: 文件类型

        [formData appendPartWithFileURL:[NSURLfileURLWithPath:path] name:@"image"fileName:@"quiet.png"mimeType:@"image/jpg"error:nil];

        

    } success:^(AFHTTPRequestOperation *operation, id responseObject) {

        

        NSString *str = [[NSStringalloc] initWithData:responseObject encoding:NSUTF8StringEncoding];

        NSLog(@"str = %@",str);

        

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

        NSLog(@"error = %@",error);

    }];

    

    

}


#pragma mark - 实现GET 请求

-(void)testJSONRequest

{

    NSString *str = @"http://www.weather.com.cn/data/cityinfo/101010100.html";

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManagermanager];

    manager.responseSerializer = [AFHTTPResponseSerializerserializer];

    [manager GET:str parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {

        

        //JSON解析

        NSDictionary *dict = [NSJSONSerializationJSONObjectWithData:responseObject options:NSJSONReadingMutableContainerserror:nil];

        NSLog(@"dict = %@",dict);

        

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

        NSLog(@"error = %@",error);

    }];

    

    

}


#pragma mark - 实现POST请求

-(void)testPostRequest

{

    //接口

    //http://quiet.local/testdir/login.php

    //  @"user": @"quiet"

    //  @"password": @"1234"

    

    NSString *urlString = @"http://quiet.local/testdir/login.php";

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManagermanager];

    manager.responseSerializer = [AFHTTPResponseSerializerserializer];

    [manager POST:urlString parameters:@{@"user":@"quiet",@"password":@"123456"} success:^(AFHTTPRequestOperation *operation, id responseObject) {

        

        NSString *str = [[NSStringalloc] initWithData:responseObject encoding:NSUTF8StringEncoding];

        NSLog(@"str = %@",str);

        

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

        

        NSLog(@"error = %@",error);

        

    }];

}


#pragma mark - 实现GET请求

-(void)testGetRequest

{

    //实例: 下载http://www.baidu.com数据

    NSString *urlString = @"http://www.baidu.com";

    

    //非常重要的类 AFHTTPRequestOperationManager

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManagermanager];

    //错误: Code=-1016

    //这个类默认下载数据是Json格式数据

    //content-type应该是 "text/json"

    //表示数据应该是二进制数据

    manager.responseSerializer = [AFHTTPResponseSerializerserializer];

    [manager GET:urlString parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {

        

        //NSLog(@"responseObject = %@",responseObject);

        NSString *str = [[NSStringalloc] initWithData:responseObject encoding:NSUTF8StringEncoding];

        NSLog(@"str = %@",str);

        

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

        NSLog(@"error = %@",error);

    }];

    

    

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值