带有 json 反馈的 AFNetworking 发布请求
Posted
技术标签:
【中文标题】带有 json 反馈的 AFNetworking 发布请求【英文标题】:AFNetworking Post Request with json feedback 【发布时间】:2011-10-03 01:03:35 【问题描述】:我正在使用 AFNetworking 并创建一个我需要 json 反馈的发布请求。下面的代码有效,但是我有两个主要问题;我在哪里释放 ActivityIndicator 管理器?第二个问题是这段代码是正确的,因为是新的,我对块感到困惑,所以我真的很想知道我是否在做正确的事情以获得最佳性能,即使它有效。
NSURL *url = [NSURL URLWithString:@"mysite/user/signup"];
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];
AFNetworkActivityIndicatorManager * newactivity = [[AFNetworkActivityIndicatorManager alloc] init];
newactivity.enabled = YES;
NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:
usernamestring, @"login[username]",
emailstring, @"login[email]",
nil];
NSMutableURLRequest *request = [httpClient requestWithMethod:@"POST" path:@"mysite/user/signup"parameters:params];
[httpClient release];
AFJSONRequestOperation *operation = [AFJSONRequestOperation operationWithRequest:request success:^(id json)
NSString *status = [json valueForKey:@"status"];
if ([status isEqualToString:@"success"])
[username resignFirstResponder];
[email resignFirstResponder];
[self.navigationController dismissModalViewControllerAnimated:NO];
else
UIAlertView *alert =[[UIAlertView alloc] initWithTitle:@"Login Unsuccessful"
message:@"Please try again"
delegate:NULL
cancelButtonTitle:@"OK"
otherButtonTitles:NULL];
[alert show];
[alert release];
failure:^(NSHTTPURLResponse *response, NSError *error)
NSLog(@"%@", error);
UIAlertView *alert =[[UIAlertView alloc] initWithTitle:@"Login Unsuccessful"
message:@"There was a problem connecting to the network!"
delegate:NULL
cancelButtonTitle:@"OK"
otherButtonTitles:NULL];
[alert show];
[alert release];
];
NSOperationQueue *queue = [[[NSOperationQueue alloc] init] autorelease];
[queue addOperation:operation];
NSLog(@"check");
非常感谢您提前提供的帮助:)
【问题讨论】:
AFJSONRequestOperation operationWithRequest:sucess:finish:
方法从何而来?我在 API 中没有看到它。
@reakinator 他实际上提到了+ JSONRequestOperationWithRequest:success:failure:
参见示例here。
【参考方案1】:
我知道这个问题有点老了,但我还是想贡献一下。
正如 steveOhh 所说,您应该使用[[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES]
来打开活动网络指示灯。它是一个singleton,因此它不需要您手动分配初始化和释放。至于另一个问题,我注意到您在块调用中缺少一些参数,您也可以这样做,这是更简洁的代码:
NSURL *url = [NSURL URLWithString:@"mysite/user/signup"];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:[NSURLRequest requestWithURL:url] success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON)
// your success code here
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON)
// your failure code here
];
[operation start]; // start your operation directly, unless you really need to use a queue
【讨论】:
你好,我使用了你的代码,但我总是进入失败块:(我错过了什么吗? @Malek 检查您的 URL 是否正确,我建议 NSLogging 来自故障块的NSError
并查看输出。
@Malek 如果您仍然无法查明问题,请使用该 NSLog 的输出打开一个新问题,我很乐意为您提供帮助。
@ArturoVM 我正在使用您的代码,但我正在徘徊在哪里将方法设置为 post?谢谢【参考方案2】:
为什么不改用这个呢?
[[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES];
因此不需要分配和初始化
其他代码不能多说,刚开始学习objective-C和AFNetworking..:)
问候, 史蒂夫0hh
【讨论】:
以上是关于带有 json 反馈的 AFNetworking 发布请求的主要内容,如果未能解决你的问题,请参考以下文章
JSON到带有AFNetworking的NSMutableArray [重复]
从 AFNetworking 2.0 加载带有 JSON 的 UITableView
AFNetworking - 向 REST 发送 HTTP POST,发送带有 Base64string 图像的 JSON