AFNetworking 2.0 使用總結
iOS應用開發,存在網絡請求是在所難免的,而AFNetworking是一個很不錯的選擇。以下是本人對AFNetworking請求的一些總結,但愿能幫到大家!
1.JSON Post請求
NSString *strName = @"user1";
NSString *strPsw = @"pwd1";
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
NSDictionary *parameters = [NSDictionary dictionaryWithObjectsAndKeys:strName, @"user", strPsw, @"password", nil];
NSString *strURL = [GT123_ServerHost stringByAppendingString:GT123_LogonServlet];
[manager POST:strURL parameters:parameters
success:^(AFHTTPRequestOperation *operation, id responseObject)
{
if (responseObject != nil)
{
NSDictionary *dicRes = responseObject;
NSString *strState = [dicRes objectForKey:@"state"];
if (strState && [strState isEqualToString:@"success"])
{
NSString *strSession = [dicRes objectForKey:@"session"];
NSLog(@"%@", strSession);
} else {
}
} else {
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error)
{
}];上段代碼是用戶登錄請求,用到了AFHTTPRequestOperationManager的POST請求。請求參數放到NSDictionary里(NSMutableDictionary也可),strURL是請求服務地址,success和failure后面寫請求回調內容。返回內容responseObject其實是一個NSDictionary對象,解析比較容易。 2.JSON Get請求
long long lTimestamp = [[NSDate date] timeIntervalSince1970] * 1000;
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSString *strURL = [NSString stringWithFormat:@"%@%@?max=20&et=%lld",GT123_ServerHost,GT123_GetNewsListBeforeServlet, lTimestamp];
[manager GET:strURL parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
if (responseObject != nil)
{
NSDictionary *dicRes = responseObject;
NSString *strState = [dicRes objectForKey:@"state"];
if (strState && [strState isEqualToString:@"success"])
{
NSArray *lNews = [dicRes objectForKey:@"post_list"];
if (lNews && lNews.count > 0)
{
NSLog(@"news count - %lu", (unsigned long)lNews.count);
}
} else {
}
} else
{
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
}];上段代碼是獲取新聞列表的具體實現,用到了AFHTTPRequestOperationManager的GET請求。所以請求參數放到strURL里。請求返回內容responseObject也是一個NSDictionary對象。3.圖片上傳
- (void)uploadImg:(UIImage *)img withName:(NSString *)imgName {
NSData *imageData = UIImageJPEGRepresentation(img, 1.0);
NSMutableDictionary *parameters = [[NSMutableDictionary alloc] init];
[parameters setObject:imgName forKey:@"name"];
[parameters setObject:@"jpg" forKey:@"type"];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
NSString *strURL = [GT123_ServerHost stringByAppendingString:GT123_UploadPostPictureServlet];
[manager POST:strURL parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData)
{
if (imageData)
{
[formData appendPartWithFileData:imageData name:imgName fileName:imgName mimeType:@"image/jpeg"];
}
} success:^(AFHTTPRequestOperation *operation, id responseObject) {
if (responseObject)
{
NSDictionary *dicRes = responseObject;
NSString *strState = [dicRes objectForKey:@"state"];
if (strState && [strState isEqualToString:@"success"])
{
NSLog(@"upload success!");
} else {
}
} else {
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
}];
}以上代碼通過post方法將圖片上傳到服務器。與上述所講json post請求不同,這里需要填充constructingBodyWithBlock內容,也就是圖片數據和參數。圖片數據是NSData類型,需要將UIImage轉成NSData。如果需要傳其他參數的話,放到parameters里,同圖片數據一起上傳服務器。 [formData appendPartWithFileData:imageData name:imgName fileName:imgName mimeType:@"image/jpeg"];上一行代碼里name和fileName參數可以隨意給個值,不要太糾結。
返回內容還是一個NSDictionary對象。
AFNetworking請求方面,本人的總結暫時有這些,后續再補上...
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!