AFNetworking 2.0 使用總結

iOS應用開發,存在網絡請求是在所不免的,而AFNetworking是一個很不錯的選擇。如下是本人對AFNetworking請求的一些總結,希望能幫到你們!html

1.JSON Post請求

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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請求

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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.圖片上傳

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
- ( 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裏,同圖片數據一塊兒上傳服務器。
 
?
1
[formData appendPartWithFileData:imageData name:imgName fileName:imgName mimeType:@ "image/jpeg" ];
上一行代碼裏name和fileName參數能夠隨意給個值,不要太糾結。

返回內容仍是一個NSDictionary對象。
 
 
AFNetworking請求方面,本人的總結暫時有這些,後續再補上...
相關文章
相關標籤/搜索