封裝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]; } }]; }