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);

    }];

    

    

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章