AFNetworking使用

轉(zhuǎn)自http://blog.csdn.net/codywangziham01/article/details/38088017

#import?"MJViewController.h"

#import?"AFNetworking.h"

@interfaceMJViewController?()

@end

@implementationMJViewController

/**

要使用常規(guī)的AFN網(wǎng)絡(luò)訪問

1.?AFHTTPRequestOperationManager?*manager?=?[AFHTTPRequestOperationManager?manager];

所有的網(wǎng)絡(luò)請(qǐng)求,均有manager發(fā)起

2.?需要注意的是,默認(rèn)提交請(qǐng)求的數(shù)據(jù)是二進(jìn)制的,返回格式是JSON

1>?如果提交數(shù)據(jù)是JSON的,需要將請(qǐng)求格式設(shè)置為AFJSONRequestSerializer

2>?如果返回格式不是JSON的,

3.?請(qǐng)求格式

AFHTTPRequestSerializer????????????二進(jìn)制格式

AFJSONRequestSerializer????????????JSON

AFPropertyListRequestSerializer????PList(是一種特殊的XML,解析起來相對(duì)容易)

4.?返回格式

AFHTTPResponseSerializer???????????二進(jìn)制格式

AFJSONResponseSerializer???????????JSON

AFXMLParserResponseSerializer??????XML,只能返回XMLParser,還需要自己通過代理方法解析

AFXMLDocumentResponseSerializer?(Mac?OS?X)

AFPropertyListResponseSerializer???PList

AFImageResponseSerializer??????????Image

AFCompoundResponseSerializer???????組合

*/

-?(void)viewDidLoad

{

[superviewDidLoad];

[selfreach];

}

#pragma?mark?-?演練

#pragma?mark?-?檢測(cè)網(wǎng)絡(luò)連接

-?(void)reach

{

/**

AFNetworkReachabilityStatusUnknown??????????=?-1,??//?未知

AFNetworkReachabilityStatusNotReachable?????=?0,???//?無連接

AFNetworkReachabilityStatusReachableViaWWAN?=?1,???//?3G?花錢

AFNetworkReachabilityStatusReachableViaWiFi?=?2,???//?局域網(wǎng)絡(luò),不花錢

*/

//?如果要檢測(cè)網(wǎng)絡(luò)狀態(tài)的變化,必須用檢測(cè)管理器的單例的startMonitoring

[[AFNetworkReachabilityManagersharedManager]startMonitoring];

//?檢測(cè)網(wǎng)絡(luò)連接的單例,網(wǎng)絡(luò)變化時(shí)的回調(diào)方法

[[AFNetworkReachabilityManagersharedManager]setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus?status)?{

NSLog(@"%d",?status);

}];

}

#pragma?mark?-?Session?下載

-?(void)sessionDownload

{

NSURLSessionConfiguration*config?=?[NSURLSessionConfigurationdefaultSessionConfiguration];

AFURLSessionManager*manager?=?[[AFURLSessionManageralloc]initWithSessionConfiguration:config];

NSString*urlString?=@"http://localhost/itcast/videos/01.C語言-語法預(yù)覽.mp4";

urlString?=?[urlStringstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSURL*url?=?[NSURLURLWithString:urlString];

NSURLRequest*request?=?[NSURLRequestrequestWithURL:url];

NSURLSessionDownloadTask*task?=?[managerdownloadTaskWithRequest:requestprogress:nildestination:^NSURL*(NSURL*targetPath,NSURLResponse*response)?{

//?指定下載文件保存的路徑

//????????NSLog(@"%@?%@",?targetPath,?response.suggestedFilename);

//?將下載文件保存在緩存路徑中

NSString*cacheDir?=?NSSearchPathForDirectoriesInDomains(NSCachesDirectory,?NSUserDomainMask,YES)[0];

NSString*path?=?[cacheDirstringByAppendingPathComponent:response.suggestedFilename];

//?URLWithString返回的是網(wǎng)絡(luò)的URL,如果使用本地URL,需要注意

NSURL*fileURL1=?[NSURLURLWithString:path];

NSURL*fileURL?=?[NSURLfileURLWithPath:path];

NSLog(@"==?%@?||||?%@",?fileURL1,?fileURL);

returnfileURL;

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

NSLog(@"%@?%@",?filePath,?error);

}];

[taskresume];

}

#pragma?mark?-?POST?JSON

-?(void)postJSON

{

AFHTTPRequestOperationManager*manager?=?[AFHTTPRequestOperationManagermanager];

NSDictionary*dict?=?@{@"name":@"zhangsan"};

NSDictionary*dict1=?@{@"name":@"wangwu"};

NSArray*array?=?@[dict,dict1];

//?設(shè)置請(qǐng)求格式

manager.requestSerializer=?[AFJSONRequestSerializerserializer];

//?設(shè)置返回格式

manager.responseSerializer=?[AFHTTPResponseSerializerserializer];

[managerPOST:@"http://localhost/postjson.php"parameters:arraysuccess:^(AFHTTPRequestOperation*operation,idresponseObject)?{

NSString*result?=?[[NSStringalloc]initWithData:responseObjectencoding:NSUTF8StringEncoding];

NSLog(@"%@",?result);

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

}];

}

#pragma?mark?-?隨機(jī)文件名上傳

-?(void)postUpload1

{

//?本地上傳給服務(wù)器時(shí),沒有確定的URL,不好用MD5的方式處理

AFHTTPRequestOperationManager*manager?=?[AFHTTPRequestOperationManagermanager];

manager.responseSerializer=?[AFHTTPResponseSerializerserializer];

[managerPOST:@"http://localhost/demo/upload.php"parameters:nilconstructingBodyWithBlock:^(id?formData)?{

NSURL*fileURL?=?[[NSBundlemainBundle]URLForResource:@"頭像1.png"withExtension:nil];

//?要上傳保存在服務(wù)器中的名稱

//?使用時(shí)間來作為文件名?2014-04-30?14:20:57.png

//?讓不同的用戶信息,保存在不同目錄中

NSDateFormatter*formatter?=?[[NSDateFormatteralloc]init];

//?設(shè)置日期格式

formatter.dateFormat=@"yyyy-MM-dd?HH:mm:ss";

NSString*fileName?=?[formatterstringFromDate:[NSDatedate]];

[formDataappendPartWithFileURL:fileURLname:@"uploadFile"fileName:fileNamemimeType:@"image/png"error:NULL];

}success:^(AFHTTPRequestOperation*operation,idresponseObject)?{

NSLog(@"OK");

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

NSLog(@"error");

}];

}

#pragma?mark?-?POST上傳

-?(void)postUpload

{

AFHTTPRequestOperationManager*manager?=?[AFHTTPRequestOperationManagermanager];

//?AFHTTPResponseSerializer就是正常的HTTP請(qǐng)求響應(yīng)結(jié)果:NSData

//?當(dāng)請(qǐng)求的返回?cái)?shù)據(jù)不是JSON,XML,PList,UIImage之外,使用AFHTTPResponseSerializer

//?例如返回一個(gè)html,text...

//

//?實(shí)際上就是AFN沒有對(duì)響應(yīng)數(shù)據(jù)做任何處理的情況

manager.responseSerializer=?[AFHTTPResponseSerializerserializer];

//?formData是遵守了AFMultipartFormData的對(duì)象

[managerPOST:@"http://localhost/demo/upload.php"parameters:nilconstructingBodyWithBlock:^(id?formData)?{

//?將本地的文件上傳至服務(wù)器

NSURL*fileURL?=?[[NSBundlemainBundle]URLForResource:@"頭像1.png"withExtension:nil];

[formDataappendPartWithFileURL:fileURLname:@"uploadFile"error:NULL];

}success:^(AFHTTPRequestOperation*operation,idresponseObject)?{

NSString*result?=?[[NSStringalloc]initWithData:responseObjectencoding:NSUTF8StringEncoding];

NSLog(@"完成?%@",?result);

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

NSLog(@"錯(cuò)誤?%@",?error.localizedDescription);

}];

}

#pragma?mark?-?JSON

-?(void)XMLData

{

AFHTTPRequestOperationManager*manager?=?[AFHTTPRequestOperationManagermanager];

//?返回的數(shù)據(jù)格式是XML

manager.responseSerializer=?[AFXMLParserResponseSerializerserializer];

NSDictionary*dict?=?@{@"format":@"xml"};

//?網(wǎng)絡(luò)訪問是異步的,回調(diào)是主線程的,因此程序員不用管在主線程更新UI的事情

[managerGET:@"http://localhost/videos.php"parameters:dictsuccess:^(AFHTTPRequestOperation*operation,idresponseObject)?{

//?如果結(jié)果是XML,同樣需要使用6個(gè)代理方法解析,或者使用第三方庫

//?第三方庫第三方框架,效率低,內(nèi)存泄漏

NSLog(@"%@",?responseObject);

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

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

}];

}

#pragma?mark?-?JSON

-?(void)JSONData

{

AFHTTPRequestOperationManager*manager?=?[AFHTTPRequestOperationManagermanager];

//?原本需要拼接get訪問URL???&?=

NSDictionary*dict?=?@{@"format":@"json"};

//?網(wǎng)絡(luò)訪問是異步的,回調(diào)是主線程的,因此程序員不用管在主線程更新UI的事情

[managerGET:@"http://localhost/videos.php"parameters:dictsuccess:^(AFHTTPRequestOperation*operation,idresponseObject)?{

NSLog(@"%@",?responseObject);

//?提問:NSURLConnection異步方法回調(diào),是在子線程

//?得到回調(diào)之后,通常更新UI,是在主線程

NSLog(@"%@",?[NSThreadcurrentThread]);

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

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

}];

}

#pragma?mark?-?POST登錄

-?(void)postLogin

{

AFHTTPRequestOperationManager*manager?=?[AFHTTPRequestOperationManagermanager];

//?原本需要拼接get訪問URL???&?=

NSDictionary*dict?=?@{@"username":@"wangwu",@"password":@"wang"};

//?網(wǎng)絡(luò)訪問是異步的,回調(diào)是主線程的,因此程序員不用管在主線程更新UI的事情

[managerPOST:@"http://localhost/login.php"parameters:dictsuccess:^(AFHTTPRequestOperation*operation,idresponseObject)?{

NSLog(@"%@",?responseObject);

//?提問:NSURLConnection異步方法回調(diào),是在子線程

//?得到回調(diào)之后,通常更新UI,是在主線程

NSLog(@"%@",?[NSThreadcurrentThread]);

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

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

}];

}

#pragma?mark?-?GET登錄

-?(void)getLogin

{

AFHTTPRequestOperationManager*manager?=?[AFHTTPRequestOperationManagermanager];

//?原本需要拼接get訪問URL???&?=

NSDictionary*dict?=?@{@"username":@"wangwu",@"password":@"wang"};

//?網(wǎng)絡(luò)訪問是異步的,回調(diào)是主線程的,因此程序員不用管在主線程更新UI的事情

[managerGET:@"http://localhost/login.php"parameters:dictsuccess:^(AFHTTPRequestOperation*operation,idresponseObject)?{

NSLog(@"%@",?responseObject);

//?提問:NSURLConnection異步方法回調(diào),是在子線程

//?得到回調(diào)之后,通常更新UI,是在主線程

NSLog(@"%@",?[NSThreadcurrentThread]);

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

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

}];

}

@end

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末笤成,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌狱庇,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蝠猬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來统捶,“玉大人榆芦,你說我怎么就攤上這事〈瘢” “怎么了匆绣?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長什黑。 經(jīng)常有香客問我崎淳,道長,這世上最難降的妖魔是什么愕把? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任拣凹,我火速辦了婚禮,結(jié)果婚禮上恨豁,老公的妹妹穿的比我還像新娘嚣镜。我一直安慰自己,他們只是感情好橘蜜,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布菊匿。 她就那樣靜靜地躺著,像睡著了一般计福。 火紅的嫁衣襯著肌膚如雪跌捆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天象颖,我揣著相機(jī)與錄音疹蛉,去河邊找鬼。 笑死力麸,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的育韩。 我是一名探鬼主播克蚂,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼筋讨!你這毒婦竟也來了埃叭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤悉罕,失蹤者是張志新(化名)和其女友劉穎赤屋,沒想到半個(gè)月后立镶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡类早,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年媚媒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涩僻。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡缭召,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出逆日,到底是詐尸還是另有隱情嵌巷,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布室抽,位于F島的核電站搪哪,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏坪圾。R本人自食惡果不足惜晓折,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望神年。 院中可真熱鬧已维,春花似錦、人聲如沸已日。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽飘千。三九已至堂鲜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間护奈,已是汗流浹背缔莲。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留霉旗,地道東北人痴奏。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像厌秒,于是被迫代替她去往敵國和親读拆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

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