標籤:
AFNetworking 使用方法(2.0)分類: IOS2014-11-12 09:17 2018人閱讀 評論(0) 收藏 舉報
目錄(?)[+]
本文介紹的是AFNetworking-2.0 使用方法(增加適應:不完善的head內的 meta的content格式)
隨著asihttprequest的停止更新,許多人都轉向了AFNetworking、 MKNetworkKit.我也是其中一個。於是我從網上找了許多文章作參考,但是結果都是失敗告終。研究了好久都搞不透,最後還是請人幫忙搞定了。經常從網上索取免費資料的一員,要有回報的思想,也為了讓更多的人少走些彎路,所以下面是代碼:(有錯誤可以指出)
首先:將AFNetworking、UIKit+AFNetworking 加入到工程
一般要引用這兩個包,不然會有錯誤提示:SystemConfiguration.framework、 MobileCoreServices.framework
然後在要使用的地方
#import "AFHTTPRequestOperationManager.h"
#import "AFHTTPSessionManager.h"
AFHTTPRequestOperationManager的post有兩個方法,一個是普通的post,另一個是可以上傳圖片的
1.上傳圖片:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManagermanager]; manager.responseSerializer.acceptableContentTypes = [NSSetsetWithObject:@"text/html"];
NSDictionary *parameters [email protected]{@"參數1":@"value1",@"參數2":
@"value2"、、、};
NSData *imageData = UIImageJPEGRepresentation([UIImage imageNamed:@"1.png"], 1.0);
[manager POST:@"替換成你要訪問的地址"parameters:parametersconstructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileData :imageData name:@"1" fileName:@"1.png" mimeType:@"image/jpeg"];
} success:^(AFHTTPRequestOperation *operation,id responseObject) {
NSLog(@"Success: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation,NSError *error) {
NSLog(@"Error: %@", error);
}];這個方法可以上傳圖片,如果不用上傳圖片,可以把這句去掉
[formData appendPartWithFileData :imageData
name:@"1"
fileName:@"1.png"
mimeType:@"image/jpeg"]
2.普通的post
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManagermanager];
manager.responseSerializer.acceptableContentTypes = [NSSetsetWithObject:@"text/html"];
NSDictionary *parameters =@{@"參數1":@"value1",@"參數2":@"value2"、、、};
[managerPOST:@"替換成你要訪問的地址"parameters:parameters
success:^(AFHTTPRequestOperation *operation,id responseObject) {
NSLog(@"Success: %@", responseObject);
}failure:^(AFHTTPRequestOperation *operation,NSError *error) {
NSLog(@"Error: %@", error);
}];
3.增加適應:不完善的head內的 meta的content格式(2014年3月17日11:20)引用:http://www.cocoachina.com/bbs/simple/?t176000.html
| tom19830924 |
2013-12-27 17:44 |
這是我第二次回答這問題了 這不是AFNetworking的問題 這是做Server那邊的人沒把head內的 meta的content格式指定好
請參考 http://stackoverflow.com/questions/477816/what-is-the-correct-json-content-type |
| evangel |
2014-03-18 21:41 |
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; manager.requestSerializer = [AFJSONRequestSerializer serializer]; manager.responseSerializer = [AFJSONResponseSerializer serializer]; [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"]; [manager.requestSerializer setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; |
解決方案:我使用的是
evangel的方法,增加下面4句:
manager.requestSerializer = [AFJSONRequestSerializer serializer];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[manager.requestSerializer setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
下面是完整的請求設定:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManagermanager];
manager.responseSerializer.acceptableContentTypes = [NSSetsetWithObject:@"text/html"];
manager.requestSerializer = [AFJSONRequestSerializerserializer];
manager.responseSerializer = [AFJSONResponseSerializerserializer];
[manager.requestSerializersetValue:@"application/json"forHTTPHeaderField:@"Accept"];
[manager.requestSerializersetValue:@"application/json; charset=utf-8"forHTTPHeaderField:@"Content-Type"];
4.逾時設定(2014年10月17日15:20)afnetworking 2.0 沒有逾時設定,好像2.1以後就有了逾時時間設定。開啟你下載的版本,找到AFURLRequewtSerialization.m ,搜尋timeout。timeout預設時間是60秒,把它改成你需要的時間
- 上一篇iOS7 最佳實務:一個天氣應用案例(下)
- 下一篇AFNetwork 作用和用法詳解
AFNetworking 使用方法(2.0)