利用ASIHTTPRequest也可以向伺服器提交請求參數,今天就做一個登入的例子,用戶端發送XML請求,然後得到服務端的響應,響應的結果是返回XML字串。直接上代碼吧,代碼中有詳細注釋。
首先在.h檔案中做如下聲明:
#import <UIKit/UIKit.h>@interface ViewController : UIViewController@property (retain,nonatomic) UIActivityIndicatorView *indicator;@property (retain, nonatomic) IBOutlet UITextField *userNameTextField;@property (retain, nonatomic) IBOutlet UITextField *passwordTextField;- (IBAction)login:(id)sender;@end
然後是.m實現檔案(這裡只列出了主要代碼部分):
//使用非同步請求並更新UI- (IBAction)login:(id)sender { //彈出載入提示框 [self showToast:@"正在登陸..."]; /*執行登陸請求 服務端為跑在Tomcat上的一個Servelet 請求方式採用xml,格式如下: <Document> <User id ="xxx" password=”xxx”/> </Document> 請求結果返回一個XML字串,這裡的伺服器位址我省略了,因為用的是以前一個項目的伺服器,這裡沒法公開 */ __block ASIHTTPRequest *request = [[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:@"http://xxx/server/Login"]]; //構建可變字串請求 NSMutableString *requestXML = [[NSMutableString alloc] init]; [requestXML appendString:@"<Document>"]; [requestXML appendString:@"<User id=\""]; [requestXML appendString:self.userNameTextField.text]; [requestXML appendString:@"\" "]; [requestXML appendString:@"password=\""]; [requestXML appendString:self.passwordTextField.text]; [requestXML appendString:@"\"/>"]; [requestXML appendString:@"</Document>"]; //將NSString類型轉換成NSData類型,後面的參數為編碼類別型,這裡是UTF-8 NSData *requestData = [requestXML dataUsingEncoding:NSUTF8StringEncoding]; //使用ASIHTTPRequest中的自訂請求參數的方法 [request appendPostData:requestData]; //佈建要求方式 [request setRequestMethod:@"POST"]; //請求執行完會調用block中的代碼 [request setCompletionBlock:^{ NSLog(@"Success"); NSLog(@"%@",[request responseString]); [self.indicator stopAnimating]; [alertView dismissWithClickedButtonIndex:0 animated:YES]; [self.indicator release]; [alertView release]; }]; //如果出現異常會執行block中的代碼 [request setFailedBlock:^{ NSLog(@"Failed"); [self.indicator stopAnimating]; [alertView dismissWithClickedButtonIndex:0 animated:YES]; [self.indicator release]; [alertView release]; }]; [request startAsynchronous]; [request release]; }//構建自訂彈出提示框-(void)showToast:(NSString*) message{ alertView = [[UIAlertView alloc] initWithTitle:message message:nil delegate:self cancelButtonTitle:nil otherButtonTitles:nil, nil]; [alertView setBackgroundColor:[UIColor clearColor]]; //必須在這裡調用show方法,否則indicator不在UIAlerView裡面 [alertView show]; self.indicator = [[UIActivityIndicatorViewalloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; self.indicator.center = CGPointMake(alertView.bounds.size.width/2, alertView.bounds.size.height-40); //停止時隱藏indicator self.indicator.hidesWhenStopped = YES; //將UIActivityIndicator作為子控制項放在UIAlertView當中 [alertView addSubview:self.indicator]; [self.indicator startAnimating]; }
下面看看運行效果和伺服器的返回資訊:
點擊登入後,可以在控制台看到伺服器返回的登入結果:
以上就是一個利用ASIHTTPRequest向服務端發送資料並擷取返回結果的小例子,利用ASIHTTPRequest還有其他很多強大的功能,具體使用方法和用途可以查看官方文檔。
對Android&IOS感興趣的朋友可以加入我們的討論QQ群,在這裡,我們只討論乾貨:
iOS群:220223507
Android群:282552849
歡迎關注我的新浪微博和我交流:@唐韌_Ryan