AFNetworking之小試牛刀

導(dǎo)語(yǔ):

眾所周知,AFNetworking是目前IOS開發(fā)中非常受歡迎的第三方網(wǎng)絡(luò)通信類庫(kù),同時(shí)AFNetworking對(duì)蘋果官方NSURLConnection和NSURLSession進(jìn)行了封裝,使用起來可以說是簡(jiǎn)單的"令人發(fā)指".

官網(wǎng)地址:

AFNetworking有關(guān)請(qǐng)求與響應(yīng)的信息

 請(qǐng)求:(序列化)
    AFURLRequestSerialization
        AFHTTPRequestSerializer(默認(rèn))   傳輸?shù)木褪嵌M(jìn)制
        AFJSONRequestSerializer   傳輸入的二進(jìn)制是一個(gè)JSON格式的二進(jìn)制 ,只有NSArray,NSDictionay
        AFPropertyListRequestSerializer 傳輸?shù)牡綍r(shí)候是一個(gè)plist,這個(gè)不玩意兒不用,因?yàn)樗煌ㄓ?
   響應(yīng):(反序列化)
 <AFURLResponseSerialization>
        AFHTTPResponseSerializer //返回的就一個(gè)純潔的二進(jìn)制
        AFJSONResponseSerializer(默認(rèn))  返回的是一個(gè)JSON格式的二進(jìn)制,并且AFN幫我們自動(dòng)序列化成了字典或是數(shù)組
        AFXMLParserResponseSerializer   XMLParser
        AFXMLDocumentResponseSerializer (Mac OS X) 不適合我們的iOS
        AFPropertyListResponseSerializer plist
        AFImageResponseSerializer //國(guó)片
        AFCompoundResponseSerializer //混合

使用AFNetworking

  • GET方法:
//1.首先創(chuàng)建一個(gè)管理者
    AFHTTPRequestOperationManager *manager =[AFHTTPRequestOperationManager manager];
    //2.發(fā)送請(qǐng)求
    //在使用AFN的時(shí)候,直接傳遞我們url的字符串就可以了
    //AFN在反序列化的時(shí)候,默認(rèn)是幫我們按照J(rèn)SON的格式去解析
    [manager GET:@"http://localhost/test.json" parameters:nil success:^(AFHTTPRequestOperation * _Nonnull operation, id  _Nonnull responseObject) {
     
        //第一個(gè)參數(shù) operation 操作
        //第二個(gè)參數(shù) responseObject
        NSLog(@"%@---%@",responseObject,[responseObject class]);
    } failure:^(AFHTTPRequestOperation * _Nullable operation, NSError * _Nonnull error) {
        NSLog(@"%@",error);
    }];
   
  • POST方法:
 //1.創(chuàng)建一個(gè)基于NSURLConnection的管理
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    
    //2.發(fā)送我們的POST請(qǐng)求
    //用戶名密碼
    NSDictionary *param = @{@"username":@"admin",@"password":@"123"};
    //登陸到得網(wǎng)址
    [manager POST:@"http://localhost/login.php" parameters:param success:^(AFHTTPRequestOperation * _Nonnull operation, id  _Nonnull responseObject) {
        NSLog(@"post result====%@---%@",responseObject,[responseObject class]);
    } failure:^(AFHTTPRequestOperation * _Nullable operation, NSError * _Nonnull error) {
        NSLog(@"%@",error);
    }];

  • AFNetworking之搭配webView使用

注意:因?yàn)槟J(rèn)情況下AFNetworking的響應(yīng)解析方式都是按照J(rèn)OSN解析,所以我們需要修改AFNetworking的解析方式,但是為了以后使用方便,我們不在AFNetworking基礎(chǔ)上修改,我們添加一個(gè)類繼承自AFHTTPSessionManager然后創(chuàng)建一個(gè)單例,這樣以后AFNetworking更新,我們的代碼也不會(huì)因此受到影響.

首先創(chuàng)建NetWorkTool類,并創(chuàng)建單例方法

#import "AFHTTPSessionManager.h"

@interface NetWorkTool : AFHTTPSessionManager

//單例
+ (instancetype)sharedNetWorkTool;

@end

實(shí)現(xiàn)單例方法

#import "NetWorkTool.h"

@implementation NetWorkTool

static NetWorkTool *_instance;
+ (instancetype)sharedNetWorkTool{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _instance = [[NetWorkTool alloc] initWithBaseURL:nil];
        
        _instance.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html", nil];
        
        //默認(rèn)情況下的響應(yīng)解析方式,就是不管服務(wù)器給我們返回的是什么,都按照J(rèn)SON去解析
        //將默認(rèn)的JSON序列化方式,改成我們最普通的二進(jìn)制
        _instance.responseSerializer = [AFHTTPResponseSerializer serializer];
    });
    
    return _instance;
}
@end

在控制器中拖入一個(gè)UIWebView試圖,通過連線方式連接到控制器中

  
#import "ViewController.h"
#import "NetWorkTool.h"

@interface ViewController ()
//WebView
@property (weak, nonatomic) IBOutlet UIWebView *webView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self loadWebView];
}

- (void)loadWebView{
    //1.獲取我們NetWorkTool的單例
    NetWorkTool *netWorkTool = [NetWorkTool sharedNetWorkTool];
    
    //2.發(fā)送GET請(qǐng)求  //html
    __weak typeof(self) weakSelf = self;
    [netWorkTool GET:@"http://www.baidu.com" parameters:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nonnull responseObject) {
        NSLog(@"result===%@----%@",responseObject,[NSThread currentThread]);
        
        //再將我們返回的二進(jìn)制,轉(zhuǎn)成我們字符串,反序列化
        NSString *html = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
        
        //在主線程更新UI
        [weakSelf.webView loadHTMLString:html baseURL:[NSURL URLWithString:@"http://www.baidu.com"]];
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"error===%@",[error localizedDescription]);
    }];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
  • AFNetworking之聯(lián)網(wǎng)檢測(cè)
    聯(lián)網(wǎng)檢測(cè)對(duì)應(yīng)狀態(tài)
    AFNetworkReachabilityStatusUnknown = -1, //未知的狀態(tài)
    AFNetworkReachabilityStatusNotReachable = 0, //不能聯(lián)網(wǎng)
    AFNetworkReachabilityStatusReachableViaWWAN = 1, //流量
    AFNetworkReachabilityStatusReachableViaWiFi = 2, //wifi
//點(diǎn)擊屏幕的時(shí)候開始檢測(cè)
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

    [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        NSLog(@"%ld",status);
    }];
    
    [[AFNetworkReachabilityManager sharedManager] startMonitoring];

}
  • AFNetworking之上傳文件
//點(diǎn)擊屏幕的時(shí)候上傳文件
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    //獲取基于NSURLSession的管理器
    AFHTTPSessionManager *manager=[AFHTTPSessionManager manager];
    
    //上傳文件
    NSDictionary *param=@{@"status":@"this is test"};
    [manager POST:@"http://localhost/post/upload-m.php" parameters:param constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
        //獲取文件1
        NSURL *url1=[[NSBundle mainBundle]URLForResource:@"01.jpg" withExtension:nil];
        [formData appendPartWithFileURL:url1 name:@"userfile[]" fileName:@"01.jpg" mimeType:@"image/png" error:NULL];
        //獲取文件2
        NSURL *url2=[[NSBundle mainBundle]URLForResource:@"02.jpg" withExtension:nil];
        NSData *data2=[NSData dataWithContentsOfURL:url2];
        //[formData appendPartWithFileData:data2 name:@"userfile[]" fileName:@"02.jpg" mimeType:@"image/png"];
        //application/octet-stream通用格式
        [formData appendPartWithFileData:data2 name:@"userfile[]" fileName:@"02.jpg" mimeType:@"application/octet-stream"];
        
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nonnull responseObject) {
        NSLog(@"responseObject--->%@",responseObject);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"error---->%@",error);
    }];

}
以上就是AFNetworking一些基本使用,由于這是在簡(jiǎn)書上發(fā)表的第一篇文章,還請(qǐng)大家多多支持,如果文章中存在錯(cuò)誤,還請(qǐng)大家指出,萬(wàn)分感謝!!!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末漠其,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子慢睡,更是在濱河造成了極大的恐慌,老刑警劉巖跷究,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肴掷,死亡現(xiàn)場(chǎng)離奇詭異块蚌,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蒲祈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門酸员,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人讳嘱,你說我怎么就攤上這事幔嗦。” “怎么了沥潭?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵邀泉,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我钝鸽,道長(zhǎng)汇恤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任拔恰,我火速辦了婚禮因谎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘颜懊。我一直安慰自己财岔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布河爹。 她就那樣靜靜地躺著匠璧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪咸这。 梳的紋絲不亂的頭發(fā)上夷恍,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音媳维,去河邊找鬼酿雪。 笑死遏暴,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的指黎。 我是一名探鬼主播拓挥,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼袋励!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起当叭,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤茬故,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后蚁鳖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體磺芭,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年醉箕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了钾腺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡讥裤,死狀恐怖放棒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情己英,我是刑警寧澤间螟,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站损肛,受9級(jí)特大地震影響厢破,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜治拿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一摩泪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧劫谅,春花似錦见坑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至未檩,卻和暖如春戴尸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背冤狡。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工孙蒙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留项棠,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓挎峦,卻偏偏與公主長(zhǎng)得像香追,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子坦胶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理透典,服務(wù)發(fā)現(xiàn),斷路器顿苇,智...
    卡卡羅2017閱讀 134,657評(píng)論 18 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,139評(píng)論 25 707
  • 鑒于有看客反應(yīng)上一篇閱讀感太差峭咒,我又左右記不起我的公眾平臺(tái)賬號(hào)密碼(誰(shuí)知道告訴我哈),只好臨時(shí)注冊(cè)了一個(gè)簡(jiǎn)書來試試...
    別處生活閱讀 270評(píng)論 2 1
  • 基本語(yǔ)法 示例 組合搜索多個(gè)條件 定位不合法的搜索以及原因 filter與query的對(duì)比 filter與quer...
    緩慢移動(dòng)的蝸牛閱讀 1,746評(píng)論 0 5
  • 春 春天來了纪岁,萬(wàn)物生機(jī)勃勃凑队, 我想聽聽花開的聲音,聞聞花兒的芬芳幔翰, 感受小苗兒從泥土中萌芽出來的生命氣息漩氨, 也想去...
    心心螢火蟲閱讀 312評(píng)論 0 1