AFNetworking 2.0 使用總結

jopen 9年前發布 | 48K 次閱讀 iOS開發 移動開發 AFNetworking

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