AFNetworking 2.0 使用总结

本文详细介绍了iOS开发中使用AFNetworking进行JSON Post/Get请求及图片上传的方法,包括请求参数设置、响应处理等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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请求方面,本人的总结暂时有这些,后续再补上...





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值