利用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