封裝AFNetworking

jopen 9年前發布 | 68K 次閱讀 iOS開發 移動開發 AFNetworking

實現AFNetworking 的高封裝
//1.將AFNetworking的業務封裝到了MyHttpDownLoad類中(.h和.m文件已給出)賦值即可使用
//2.調用方法-(void)testAFNetworking; 該方法中的網址是我內網的網址,使用者可以換成自己的JSON請求的網址
//3.最后APPDelegate中還要寫一句 [[AFNetworkReachabilityManager sharedManager] startMonitoring];監聽網絡狀態

APPDelegate里還要設置一下
//監聽網絡狀態,只調用一次
    [[AFNetworkReachabilityManager sharedManager] startMonitoring];


#import <Foundation/Foundation.h>

@interface MyHttpDownLoad : NSObject //cb callback回調 +(void) download:(NSString )urlpath param:(NSDictionary )dict finish:( void (^)(NSData data,NSDictionary obj, NSError *error))cb; @end

import "MyHttpDownLoad.h"

import "AFNetworking.h"

static BOOL isFirst = NO; static BOOL canCHeckNetwork = NO;

@implementation MyHttpDownLoad +(void) download:(NSString )urlpath param:(NSDictionary )dict finish:(void (^)(NSData ,NSDictionary obj, NSError *))cb{          //1..檢查網絡連接(蘋果公司提供的檢查網絡的第三方庫 Reachability)     //AFN 在 Reachability基礎上做了一個自己的網絡檢查的庫, 基本上一樣

    if (isFirst == NO) {         //網絡只有在startMonitoring完成后才可以使用檢查網絡狀態         [[AFNetworkReachabilityManager sharedManager] startMonitoring];         [[AFNetworkReachabilityManager sharedManager]setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {             canCHeckNetwork = YES;         }];         isFirst = YES;     }          //只能在監聽完善之后才可以調用     BOOL isOK = [[AFNetworkReachabilityManager sharedManager] isReachable];     //BOOL isWifiOK = [[AFNetworkReachabilityManager sharedManager] isReachableViaWiFi];     //BOOL is3GOK = [[AFNetworkReachabilityManager sharedManager]isReachableViaWWAN];     //網絡有問題     if(isOK == NO && canCHeckNetwork == YES){         NSError error = [NSError errorWithDomain:@"網絡錯位" code:100 userInfo:nil];         cb(nil, nil,error);         return;     }          //2..實現解析     AFHTTPSessionManager manager = [AFHTTPSessionManager manager];     manager.responseSerializer = [AFHTTPResponseSerializer serializer];     [manager GET:urlpath parameters:dict success:^(NSURLSessionDataTask task, id responseObject) {         //成功 cb是對方傳遞過來的對象 這里是直接調用         NSDictionary obj = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];         cb(responseObject, obj ,nil);     } failure:^(NSURLSessionDataTask task, NSError error) {         //失敗         cb(nil, nil ,error);     }]; }; @end</pre>


   

//2.調用方式
-(void)testAFNetworking{
    NSString *urlPath = @"http://10.0.8.8/sns/my/user_list.php";
    NSDictionary *params = @{@"page" : @"10"};
    [MyHttpDownLoad download:urlPath param:params finish:^(NSData *data,NSDictionary *obj, NSError *error) {
        if (error == nil) {
            //obj即為解析后的數據.
            NSLog(@"parase my download json is %@",obj);
        }else{
            UIAlertView *av = [[UIAlertView alloc]initWithTitle:@"網絡狀態" message:@"親 網絡不給力" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
            [av show];
        }
    }];
}

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!