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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!