带有 json 反馈的 AFNetworking 发布请求

Posted

技术标签:

【中文标题】带有 json 反馈的 AFNetworking 发布请求【英文标题】:AFNetworking Post Request with json feedback 【发布时间】:2011-10-03 01:03:35 【问题描述】:

我正在使用 AFNetworking 并创建一个我需要 json 反馈的发布请求。下面的代码有效,但是我有两个主要问题;我在哪里释放 ActivityIndi​​cator 管理器?第二个问题是这段代码是正确的,因为是新的,我对块感到困惑,所以我真的很想知道我是否在做正确的事情以获得最佳性能,即使它有效。

    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

iOS 从带有 JSON 参数的 AFNetworking HTTP POST 方法获取 JSON 响应

AFNetworking : 上传带有其他参数的图片

AFNetworking 通过 JSON 从音频发送字节