AFNetworking 3.0的使用

下面介紹一下iOS開發(fā)中幾種最常用到的AFNetworking方法。

一、實時監(jiān)測網(wǎng)絡(luò)狀態(tài)

可以看到很多app都會有一個功能,當用戶的網(wǎng)絡(luò)發(fā)生變化時會出現(xiàn)相應(yīng)的提醒。AFNetworking提供了一個方法很簡單的實現(xiàn)了這一功能。

// 實時監(jiān)視網(wǎng)絡(luò)狀態(tài)的變化

- (void) observeNetworkState {

AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];

[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {

switch (status) {

case AFNetworkReachabilityStatusUnknown:

NSLog(@"無法識別的網(wǎng)絡(luò)");

break;

case AFNetworkReachabilityStatusNotReachable:

NSLog(@"沒有網(wǎng)絡(luò)");

break;

case AFNetworkReachabilityStatusReachableViaWWAN:

NSLog(@"移動網(wǎng)絡(luò)");

break;

case AFNetworkReachabilityStatusReachableViaWiFi:

NSLog(@"WIFI網(wǎng)絡(luò)");

break;

default:

break;

}

}];

[manager startMonitoring];

}

可以看到上面的代碼 網(wǎng)絡(luò)狀態(tài)status有四種:

AFNetworkReachabilityStatusUnknown? 無法識別的網(wǎng)絡(luò)

AFNetworkReachabilityStatusNotReachable? 無網(wǎng)絡(luò)

AFNetworkReachabilityStatusReachableViaWWAN 移動網(wǎng)絡(luò)

AFNetworkReachabilityStatusReachableViaWiFi? wifi網(wǎng)絡(luò)

當網(wǎng)絡(luò)狀態(tài)發(fā)生變化時,代碼會自動走block,通過switch 來區(qū)分不同網(wǎng)絡(luò)狀態(tài)系統(tǒng)應(yīng)該做上面操作。

二、GET 和POST請求


// GET請求方法

-(void) getRequest {

// 啟動系統(tǒng)風火輪

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

NSString *domainStr = @"http://c.m.163.com/nc/article/headline/T1348647909107/0-20.html";

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

manager.responseSerializer = [AFHTTPResponseSerializer serializer];

//以get的形式提交,只需要將上面的請求地址給GET做參數(shù)就可以

[manager GET:domainStr parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {

// 下載進度

NSLog(@"進度 - %f", downloadProgress.fractionCompleted);

} success:^(NSURLSessionDataTask * _Nonnull task, id? _Nullable responseObject) {

// 隱藏系統(tǒng)風火輪

[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

//json解析

NSDictionary *resultDic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];

NSLog(@"---獲取到的json格式的字典--%@",resultDic);

} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

NSLog(@"%@",error);

// 解析失敗隱藏系統(tǒng)風火輪(可以打印error.userInfo查看錯誤信息)

[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

}];

}



// POST請求方法

-(void)postRequestData{

// 啟動系統(tǒng)風火輪

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

//接口

NSString *domainStr = @"xxxxxxxxxxxxx";

//假如需要提交給服務(wù)器的參數(shù)是key=1,class_id=100

//創(chuàng)建一個可變字典

NSMutableDictionary *parametersDic = [NSMutableDictionary dictionary];

//往字典里面添加需要提交的參數(shù)

[parametersDic setObject:@"1" forKey:@"key"];

[parametersDic setObject:@"100" forKey:@"class_id"];

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

manager.responseSerializer = [AFHTTPResponseSerializer serializer];

//以post的形式提交,POST的參數(shù)就是上面的域名,parameters的參數(shù)是一個字典類型,將上面的字典作為它的參數(shù)

[manager POST:domainStr parameters:parametersDic progress:^(NSProgress * _Nonnull uploadProgress) {

// 下載進度

NSLog(@"進度 - %f", uploadProgress.fractionCompleted);

} success:^(NSURLSessionDataTask * _Nonnull task, id? _Nullable responseObject) {

// 隱藏系統(tǒng)風火輪

[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

//json解析

NSDictionary *resultDic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];

NSLog(@"---獲取到的json格式的字典--%@",resultDic);

} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

// 解析失敗隱藏系統(tǒng)風火輪(可以打印error.userInfo查看錯誤信息)

[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

}];

}

三、下載操作

看到網(wǎng)上寫的教程,很多都是錯誤的,自己琢磨了一下午才在github上找到了解決的辦法。

下面演示的是下載一個mp3文件,通過此方法可以實時監(jiān)測下載進度,可根據(jù)需求決定是否添加下載進度條。

- (void)downLoad{

//1.創(chuàng)建管理者對象

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

//2.確定請求的URL地址

NSURL *url = [NSURL URLWithString:@"http://yinyueshiting.baidu.com/data2/music/53333773/53333773.mp3?xcode=688e9c2348dace57e4d6351b3c1b445d"];

//3.創(chuàng)建請求對象

NSURLRequest *request = [NSURLRequest requestWithURL:url];

//4.下載任務(wù)

NSURLSessionDownloadTask *task = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {

//打印下下載進度

// @property int64_t totalUnitCount;? ? 需要下載文件的總大小

// @property int64_t completedUnitCount; 當前已經(jīng)下載的大小

NSLog(@"%lf",1.0 * downloadProgress.completedUnitCount / downloadProgress.totalUnitCount);

} destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {

//下載地址

NSLog(@"默認下載地址:%@",targetPath);

// 獲取documents路徑

NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

// 自己為文件取一個名字ddd.mp3

//? ? ? ? NSString *path2 = [path stringByAppendingString:@"/ddd.mp3"];

// 根據(jù)下載的文件自帶的名字response.suggestedFilename

// 拼接文件下載存放路徑

NSString *path2 = [path stringByAppendingPathComponent:response.suggestedFilename];

NSURL *url = [NSURL fileURLWithPath:path2];

return url;

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

//下載完成調(diào)用的方法 NSLog(@"下載完成:");

NSLog(@"=====%@--%@",response,filePath);

}];

//開始啟動任務(wù)

[task resume];

}


下載完成在沙盒中可以看到歌曲已經(jīng)下載下來。



如果這篇文章對您有一丟丟幫助 請給我點個心哦。

未完待續(xù)。。。。。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容